啟動線程:
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對象中有線程的句柄,可以使用該句柄強行殺死線程。但是不推薦使用這種方式,當可以正常結束的時候,選擇前兩種方法較好。