多執行緒退出
阿新 • • 發佈:2018-12-21
簡介:
多執行緒退出,有兩種安全的退出方法。
1.同一執行緒
呼叫WaitForSingleObject。必須在同一個執行緒,否則會造成阻塞。例子如下;
m_pThreadRec = AfxBeginThread(Thread_TcpServerReceive,this);
UINT Thread_TcpServerReceive( LPVOID pParam ) { CTcpAsynSDlg *pMainDlg = (CTcpAsynSDlg*)AfxGetApp()->GetMainWnd(); ::WaitForSingleObject(pMainDlg->m_pThreadRec->m_hThread, INFINITE); return true; }
注意:有很多人在另一個執行緒呼叫:WaitForSingleObject(),第二個引數INFINITE,訊息一直阻塞。
2.不同執行緒
例如在主執行緒通過AfxBeginThread()開啟一個執行緒,然後在主執行緒關閉對話方塊前呼叫MsgWaitForMultipleObjects()等待執行緒退出。void CTcpAsynSDlg::OnDestroy() { CDialog::OnDestroy(); MsgWaitForMultipleObjects( 1 , &m_pThreadRec->m_hThread, FALSE, INFINITE, QS_ALLINPUT); }
注意:關閉和開啟執行緒的邏輯關係自己要定義好。可定義一些標誌位。