1. 程式人生 > >多執行緒退出

多執行緒退出

簡介:

多執行緒退出,有兩種安全的退出方法。


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); 
}

注意:關閉和開啟執行緒的邏輯關係自己要定義好。可定義一些標誌位。