以事件通知執行緒結束,並等待執行緒安全退出
阿新 • • 發佈:2019-02-11
有關windows下的執行緒以及非同步通訊機制的一些體會:
//////////////////////////////////////////////////// // // 以事件通知執行緒退出,並等待執行緒安全退出 // // //////////////////////////////////////////////////// #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <assert.h> HANDLE g_hExitEvent ; DWORD WINAPI ThreadFunc( LPVOID lp ) { while( true ) { // 檢視事件是否被啟用 DWORD dwWaitCode = WaitForSingleObject( g_hExitEvent , INFINITE ) ; if( WAIT_OBJECT_0 == dwWaitCode ) { printf("Recv the quit event\n") ; break ; } } printf("Quit......\n" ) ; return 0 ; } int main() { g_hExitEvent = CreateEvent( 0 , 0 , 0 , 0 ) ; // 以掛起方式建立執行緒 HANDLE hThread = CreateThread( 0 , 0 , ThreadFunc , 0 , CREATE_SUSPENDED , 0 ) ; if( INVALID_HANDLE_VALUE == hThread ) { GetLastError() ; return 0 ; } // 使執行緒開始執行 ResumeThread( hThread ) ; printf("按回車鍵激發事件:") ; getchar() ; // 使事件處於激發的狀態 SetEvent( g_hExitEvent ) ; // 等待執行緒執行結束 DWORD dwWaitCode = WaitForSingleObject( hThread , INFINITE ) ; // 斷言判斷執行緒是否正常結束 assert( dwWaitCode == WAIT_OBJECT_0 ) ; // 釋放執行緒控制代碼 CloseHandle( hThread ) ; }