WaitForSingleObject
函数用来等待一个内核对象变为有信号状态:
DWORD
WaitForSingleObject(
HANDLE
hObject, //指明一个内核对象的句柄
DWORD
dwMilliseconds); //等待时间
(ms,可以指定为无限大,如果为0 表示
函数根据测试同步对象的状态并立即返回
)
返回值:
WAIT_OBJECT_0:内核状态处于已通知状态,期待的状态
WAIT_TIMEOUT:超时退出。
WAIT_FAILED:出错退出。需要使用GetLastErr.
WaitFor
Multiple
Object
函数用来等待多个内核对象变为有信号状态:
DWORD
WaitForMultipleObject(
DWORD
nCount,
//表示lphandles数组的元素个数
CONST HANDLE
*lphandles,
//指向一个有对象handles组成的数组
BOOL
bWaitAll,
//true,则表示所有的handles都必须激发,此函数才得以返回,否则,此函数将在任何一个handle激发时就返回
DWORD
dwMilliseconds
//等待时间
(超时返回,可为0,立即返回,INFINITE表示无穷等待)
);
DWORD
WaitForMultipleObjectsEx
(
DWORD
nCount, // number of handles in array
(等待的对象,对象句柄的最大数量为64,参数不能为0)
CONST HANDLE
*lphandles , // object-handle array
(对象处理数组)
BOOL
bWaitAll, // wait option
(True:函数返回时所有对象的状态被设置为“有信号状态”; FLASE:该函数返回的任何一个对象的状态被设置为“有新号状态”,此时返回值表示的是对象返回的列表下标)
DWORD
dwMilliseconds, // time-out interval
BOOL bAlertable
// alertable option
(如果此参数为TRUE,线程处于等待状态,系统队列时,该函数返回一个I / O完成例程或APC,线程运行的例行程序或功能。否则,该函数不返回,不执行完成例程或APC功能。)
);
返回值:
WAIT_OBJECT_0:状态处于发信号的状态。最合理的结束方式。
WAIT_TIMEOUT:超时退出。
WAIT_ABANDONED:针对Mutex对象,就是在owner线程退出之前也没有释放Mutex。
WAIT_FAILED:出错退出。需要使用GetLastErr.
WAIT_OBJECT_0 to (WAIT_OBJECT_0 + nCount – 1):
如果
wait option是TRUE,返回WAIT_OBJECT_0表示所有句柄都发了信号;
如果
wait option是FLASE,返回什么就是第几个句柄发了信号。
WAIT_ABANDONED_0 to (WAIT_ABANDONED_0 + nCount – 1):
如果
wait option是TRUE,返回值WAIT_ABANDONED_0表示所有的线程发信号,至少一个线程退出;
如果
wait optionll是TRUE,至少一个线程退出,句柄就是返回值指的那个。