廢話不說,先上代碼:
void CtestDlg::OnBnClickedButton1()
{
nWaitEvent=CreateEvent(NULL,TRUE,TRUE,_T("tickets"));
AfxBeginThread(ThreadDataServe,this);
}
UINT CtestDlg::ThreadDataServe(LPVOID lpParam)
{
CtestDlg* pDlg=(CtestDlg *)lpParam;
while(true)
{
for(int i=0;i<10000;i++)
{
pDlg->SetDlgItemInt(IDC_COUNT,i);
}
::ResetEvent(nWaitEvent);
::Sleep(2000);
}
return 1;
}
void CtestDlg::OnBnClickedButton2()
{
WaitForSingleObject(nWaitEvent,INFINITE); //
::SuspendThread(threadHandle);
AfxMessageBox(_T("OK"));
::ResumeThread(threadHandle);
}
想實作在OnBnClickedButton2函式中等待執行緒中的for回圈完整結束,但是WaitForSingleObject(nWaitEvent,INFINITE);一直回傳不了,感覺對于事件的用法不太正確,求教怎樣才能在OnBnClickedButton2中等到某次for回圈結束才做其他事???
謝謝各位。。。。
uj5u.com熱心網友回復:
用法錯了,CreateEvent你創建的是人工重置事件,且初始狀態是signal。WaitForSingle...()是一直等到EVENT為Signal狀態。ResetEvent是設定EVENT為no signal狀態。/
還是好好看看MSDN檔案吧~
uj5u.com熱心網友回復:
上面寫錯了,原代碼是這樣的:void CtestDlg::OnBnClickedButton1()
{
nWaitEvent=CreateEvent(NULL,TRUE,TRUE,_T("tickets"));
AfxBeginThread(ThreadDataServe,this);
}
UINT CtestDlg::ThreadDataServe(LPVOID lpParam)
{
CtestDlg* pDlg=(CtestDlg *)lpParam;
while(true)
{
::ResetEvent(nWaitEvent);
for(int i=0;i<10000;i++)
{
pDlg->SetDlgItemInt(IDC_COUNT,i);
}
SetEvent(nWaitEvent);
::Sleep(2000);
}
return 1;
}
void CtestDlg::OnBnClickedButton2()
{
WaitForSingleObject(nWaitEvent,INFINITE); //
::SuspendThread(threadHandle);
AfxMessageBox(_T("OK"));
::ResumeThread(threadHandle);
}
uj5u.com熱心網友回復:
void CtestDlg::OnBnClickedButton1()
{
nWaitEvent=CreateEvent(NULL,TRUE,TRUE,_T("tickets"));
AfxBeginThread(ThreadDataServe,this);
}
UINT CtestDlg::ThreadDataServe(LPVOID lpParam)
{
CtestDlg* pDlg=(CtestDlg *)lpParam;
while(true)
{
::ResetEvent(nWaitEvent);
for(int i=0;i<10000;i++)
{
pDlg->SetDlgItemInt(IDC_COUNT,i);
}
SetEvent(nWaitEvent);
::Sleep(2000);
}
return 1;
}
void CtestDlg::OnBnClickedButton2()
{
WaitForSingleObject(nWaitEvent,INFINITE); //
::SuspendThread(threadHandle);
AfxMessageBox(_T("OK"));
::ResumeThread(threadHandle);
}
uj5u.com熱心網友回復:
《Windows核心編程》轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/125099.html
標籤:進程/線程/DLL
上一篇:error C2601: 'OnTimer' : local function definitions are illegal怎么解決
