CEvent eventWriteD;
char g_Array[10];
UINT WriteW(LPVOID pParam);
UINT WriteD(LPVOID pParam);
void CMultiThread9Dlg::OnWritew()
{
// TODO: Add your control notification handler code here
CWinThread *pWriteW=AfxBeginThread(WriteW,
&m_ctrlW,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteW->ResumeThread();
CWinThread *pWriteD=AfxBeginThread(WriteD,
&m_ctrlD,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteD->ResumeThread();
}
/*
仔细分析这两个线程函数,
您就会正确理解CEvent 类。
线程WriteD执行到 WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
处等待,直到事件 eventWriteD为有信号该线程才往下执行,
因为eventWriteD对象是自动事件,
则当WaitForSingleObject()返回时,
系统自动把eventWriteD对象重置为无信号状态。
*/
UINT WriteW(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit->SetWindowText("");
for(int i=0;i<10;i++)
{
g_Array[i]='W';
pEdit->SetWindowText(g_Array);
Sleep(1000);
}
//eventWriteD.SetEvent();
/*
BOOL CEvent::SetEvent();
将 CEvent 类对象的状态设置为有信号状态。
如果事件是人工事件,则 CEvent 类对象保持为有信号状态,
直到调用成员函数 ResetEvent()将 其重新设为无信号状态时为止。
如果CEvent 类对象为自动事件,则在SetEvent()将事件设置为有信号状态后,
CEvent 类对象由系统自动重置为无信号状态。
如果该函数执行成功,则返回非零值,否则返回零。
*/
return 0;
}
UINT WriteD(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit->SetWindowText("");
WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
for(int i=0;i<10;i++)
{
g_Array[i]='D';
pEdit->SetWindowText(g_Array);
Sleep(1000);
}
return 0;
}
void CMultiThread9Dlg::OnBtnSetevent()
{
eventWriteD.SetEvent();
}
CEvent eventWriteD.SetEvent();
最新推荐文章于 2019-07-09 14:29:59 发布