Posted on 2012-10-19 09:43
盛勝 閱讀(243)
評論(0) 編輯 收藏 引用
void CMulThreadDlg::OnBnClickedButtonTheadsametime()
{
// TODO: 在此添加控件通知處理程序代碼
CWinThread *p1=AfxBeginThread(thread1event,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
// 線程1 優先級與主線程共同 掛起線程直到RusumeThread
p1->ResumeThread();
eventto.SetEvent();//CEvent eventto
CWinThread *p2=AfxBeginThread(thread2event,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
p2->ResumeThread();
}
UINT thread1event( LPVOID pParam )
{
CMulThreadDlg *eve1=(CMulThreadDlg *)pParam;
while (1)
{
WaitForSingleObject(eventto.m_hObject,INFINITE);
/*
hHandle:指定對象或事件的句柄;
dwMilliseconds: 等待時間,以毫妙為單位,當超過等待時間時,此函數將返回。如果該參數設置為0,則該函數立即返回,如果設置為INFINITE,則該函數直到有信號才返回。
*/
eve1->GetDlgItem(IDC_STATIC1)->SetWindowText("線程1打開");
Sleep(5000);
eve1->GetDlgItem(IDC_STATIC1)->SetWindowText("線程1關閉");
eventto.SetEvent();
if (1==m_stop1)
{
m_stop1=0;
break;
}
}
return 0;
}
UINT thread2event( LPVOID pParam )
{
CMulThreadDlg *eve2=(CMulThreadDlg *)pParam;
while(1)
{
WaitForSingleObject(eventto.m_hObject,INFINITE);
eve2->GetDlgItem(IDC_STATIC2)->SetWindowText("線程2打開");
Sleep(4000);
eve2->GetDlgItem(IDC_STATIC2)->SetWindowText("線程2關閉");
eventto.SetEvent();
if (1==m_stop2)
{
m_stop2=0;
break;
}
}
return 0;
}
void CMulThreadDlg::OnBnClickedButtonClosethread()
{
// TODO: 在此添加控件通知處理程序代碼
m_stop1=1;
m_stop2=1;
}