多线程通信——等待函数

来源:互联网 发布:艾瑞数据 今日头条 编辑:程序博客网 时间:2024/05/29 08:16

当进程或者线程正在执行的时候,进程内核对象处于未通知的状态,当进程终止的时候,它就变成已通知状态。

线程可以使自己进入等待状态,直到一个对象变成已通知状态,可以通过等待函数还实现。

DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds);

第一个参数是要等待的内核对象

第二个参数是为了等该对象变为已通知状态需要等待多长时间。

DWORD WINAPI MonitorThread(LPVOID threadParameter){while(1){HANDLE hThread =CreateThread(NULL, 0, clientHandleThread, NULL, 0, NULL);WaitForSingleObject( hThread,INFINITE);CloseHandle(hThread);}}
例如,上面的程序段表示,Monitor监视线程的执行情况,若是线程异常退出则立即重启新的线程来执行相应的操作。

DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds); 返回值

1. WAIT_OBJECT_0 等待的对象变为已通知状态

2. WAIT_TIMEOUT 等待超时

3. WAIT_FAILED 将一个无效的句柄传给WaitForSingleObject


另一个等待函数是: 

DWORD WaitForMultipleObjects(DWORD dwCount,                    //要等待的内核数量,必须在1-64之间CONST HANDLE* phObjects,          //等待的内核对象句柄数组BOOL fWaitAll,                    //Ture表示等待所有的内核对象变成已通知状态,False表示等待其中之一变为已通知状态就返回DWORD dwMilliseconds);            //为了等该对象变为已通知状态需要等待多长时间。

返回值:

与WaitForSingleObject相似,但是当fWaitAll为False的时候,程序可能想知道是那个对象变为已通知状态,这时返回值为

WAIT_OBJECT_0 与WAIT_OBJECT_0 + dwCount - 1 之间的一个值