void CNewDlg::OnButtonSenddata()
{
hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(hEvent);
pWorkThread=AfxBeginThread(ReceiveThread,this);
}
创建的event第二个参数是FALSE的
另外:
我在程序中增加一全局变量用于判断也不能达到目的:
BOOL m_endthread=TRUE;
volatile HANDLE hEvent=NULL;
void CNewDlg::OnButtonResetcan()
{
if(m_endthread==FALSE)
{
Sleep(100);
}
WaitForSingleObject(hEvent, INFINITE);
...................
SetEvent(hEvent);
..................
}
void CNewDlg::OnButtonSenddata()
{
hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
SetEvent(hEvent);
pWorkThread=AfxBeginThread(ReceiveThread,this);
}
UINT CNewDlg::ReceiveThread(void *param)
{
CNewDlg *dlg=(CNewDlg *) param;
dlg->GetParent();
.............
WaitForSingleObject(dlg->hEvent, INFINITE);
m_endthread=FALSE;
........
。..........////////////////////(1)
SetEvent(dlg->hEvent);
m_endthread=TRUE; //(2)
}
辅助线程运行到(1)时若被主线程OnButtonResetcan() 函数打断,则Sleep后辅助线程还
是不能运行到(2)处,好像Sleep没有作用,OnButtonResetcan() 函数里Sleep完后继续
顺序执行了,而此时由于辅助里SetEvent(dlg->hEvent) //(2)
这句没有执行,导致程序在主线程WaitForSingleObject(hEvent, INFINITE)处停止了,
奇怪为什么不能达到我想的目的呢(就是辅助(1)跳转到主线程,由于Sleep作用主线程
等待 程序继续回到辅助线程运行,直到(2)句运行完后再回到主线程继续运行)?