啟動線程:
CWinThread* AfxBeginThread( 線程函數,this );
線程的退出:
在剛剛使用的時候,退出線程的方法有問題,導致退出的時候異常。
下面說線程退出的方法:
1. 線程函數返回
線程都在死循環中,當滿足一定條件時,return,也會將線程結束。
2. AfxEndThread
這個函數只能用在線程函數中,當滿足一定條件是,調用。
舉一個例子:
可以創建一個信號量,用WaitForSingleObject函數來檢測該信號量的狀態。
成員變量 m_hThreadEvent;
m_hThreadEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
線程的執行函數:
for ( ; ; )
{
DWORD dwRetVal;
dwRetVal = WaitForSingleObject( m_hThreadEvent, 100 );
if ( dwRetVal == WAIT_TIMEOUT )
{
// TODO:
}
else
{
// stop receive text thread.
DWORD dwExitCode;
GetExitCodeThread( m_pThreadRecv->m_hThread, &dwExitCode );
AfxEndThread( dwExitCode, TRUE );
}
}要結束線程時,使用SetEvent,將信號量置為有信號。
該線程是在信號量有信號時,退出。
3. TerminateThread
在CWinThread對象中有線程的句柄,可以使用該句柄強行殺死線程。但是不推薦使用這種方式,當可以正常結束的時候,選擇前兩種方法較好。