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