为什么5个工作线程的执行顺序保持不边?达人请进.该怎么处理

为什么5个工作线程的执行顺序保持不边?达人请进.
程序首先创建了一个投递线程,5个工作线程(线程0、线程1、线程2、线程3、线程4)。投递线程用于产生数据,并把产生的数据放到一个队列中。5个工作线程从这个数据队列中提取数据,并把提取后的数据给删掉,并随机延迟一段时间。
每个工作线程延迟一个随机的时间后,继续从数据队列中提取数据。
这5个工作线程是处于竞争状态的,如线程0、线程1、线程3、线程4处于运行状态,线程2处于空闲状态,则下一次系统调度,就调用线程2。

现在我的问题是,程序中这5个工作线程,是按顺序处理队列数据的。即先是线程1处理数据,再是线程2,3,4,0;一个循环之后,还是1、2、3、4、0;再循环之后,接着还是1、2、3、4、0...
这5个工作线程根本就没有抢时间去跑。

付关键代码如下
#define   workThreadCount   5;
volatile   bool   isMainThreadWorking;
std::queue <int>   lst_data;

std::queue <int>   lst_p_thread_data[5];

int   count;
CCriticalSection   critical_section;
CEvent   eventBeginWork;

UINT   postThread(LPVOID   pParam);
UINT   workThread(LPVOID   pParam);

UINT   postThread(LPVOID   pParam)
{
time_t   t;
srand((unsigned)   time(&t));

while(isMainThreadWorking&&count <10000){
critical_section.Lock();

lst_data.push(count);
count++;

critical_section.Unlock();
if(count%10==0)
{
eventBeginWork.SetEvent();
}

Sleep(rand()%800);
}
return   0;
}

UINT   workThread(LPVOID   pParam)
{
int   ThreadNo;
std::queue <int>   lst_work_thread_data;
time_t   t;
srand((unsigned)   time(&t));

ThreadNo   =   *((int*)pParam);

//CString   sPrintMessage;
//sPrintMessage.Format(_T( "线程%d开始 "),ThreadNo);
//AfxMessageBox(sPrintMessage);

while(isMainThreadWorking){

WaitForSingleObject(eventBeginWork,INFINITE);

critical_section.Lock();

CString   threadNo;
threadNo.Format(_T( "线程%d正在运行 "),ThreadNo);
//((CDataWriterDlg*)AfxGetApp()-> m_pMainWnd)-> m_display_static.SetWindowTextW(threadNo);

while(!lst_data.empty())
{
lst_work_thread_data.push(lst_data.front());
lst_data.pop();
}

critical_section.Unlock();

Sleep(rand()%1200);
}

while(!lst_work_thread_data.empty())
{
lst_p_thread_data[ThreadNo].push(lst_work_thread_data.front());
lst_work_thread_data.pop();
}

return   0;
}

void   CDataWriterDlg::OnBnClickedStart()
{
//   TODO:   在此添加控件通知处理程序代码
isMainThreadWorking   =   true;
pPostThread   =   AfxBeginThread((AFX_THREADPROC)postThread,NULL);

for(int   i=0;i <5;i++)
{
pWorkThread[i]   =   AfxBeginThread((AFX_THREADPROC)workThread,(LPVOID)&i);
}
}

void   CDataWriterDlg::OnBnClickedStop()
{
//   TODO:   在此添加控件通知处理程序代码
isMainThreadWorking   =   false;
WaitForSingleObject(pPostThread-> m_hThread,INFINITE);

eventBeginWork.SetEvent();
eventBeginWork.SetEvent();
eventBeginWork.SetEvent();
eventBeginWork.SetEvent();
eventBeginWork.SetEvent();

WaitForSingleObject(pWorkThread[0]-> m_hThread,INFINITE);
WaitForSingleObject(pWorkThread[1]-> m_hThread,INFINITE);
WaitForSingleObject(pWorkThread[2]-> m_hThread,INFINITE);
WaitForSingleObject(pWorkThread[3]-> m_hThread,INFINITE);
WaitForSingleObject(pWorkThread[4]-> m_hThread,INFINITE);

}

void   CDataWriterDlg::OnBnClickedSave()
{
//   TODO:   在此添加控件通知处理程序代码
CStdioFile   mFile;  
CFileException   mExcept;  
mFile.Open(_T( "Result.txt "),   CFile::modeCreate|CFile::modeWrite,   &mExcept);