ida*_*hmu 6 c++ winapi return handle waitformultipleobjects
由于一些人有文档的不同的解释,我想澄清一劳永逸的所有返回值WaitForMultipleObjects的时
bWaitAll = TRUE. 根据文件:
返回值
WAIT_OBJECT_0到(WAIT_OBJECT_0 + nCount- 1)
如果bWaitAll为TRUE,则返回值表示发出所有指定对象的状态.
假设我已经传递了5个句柄来执行此功能并且所有这些句柄都被发出信号,是返回值WAIT_OBJECT_0吗?
我正在尝试以编程方式验证WaitForMultipleObjects成功.
DWORD dwWaitForMultipleObjectsRes = WaitForMultipleObjects(dwOpenProcessCount, handles, TRUE, m_dwWaitTimeForProcToBeKilled);
if (dwWaitForMultipleObjectsRes != WAIT_OBJECT_0)
// failed?
Run Code Online (Sandbox Code Playgroud)
我想验证条件的正确性.
该文档是相当明显,从返回代码WAIT_OBJECT_0通过对WAIT_OBJECT_0 + NCOUNT - 1,如果等待被满足后,将返回:
如果bWaitAll为TRUE,则返回值表示发出所有指定对象的状态.
它没有指定确切的值,因此没有人可以肯定地说它将在该范围内.
所以不要测试if (dwWaitForMultipleObjectsRes == WAIT_OBJECT_0),你应该测试:
if ((dwWaitForMultipleObjectsRes >= WAIT_OBJECT_0)
&& (dwWaitForMultipleObjectsRes < (WAIT_OBJECT_0 + dwOpenProcessCount)))
{
// wait satisfied, all objects signalled
}
Run Code Online (Sandbox Code Playgroud)