::WaitForSingleObject有哪些用法
时间: 2024-01-20 22:04:35 浏览: 141
WaitForSingleObject的用法
::WaitForSingleObject是Windows API中的一个函数,用于等待一个内核对象的信号状态,直到等待时间结束或者对象信号状态发生变化。其用法如下:
1.等待一个线程的结束:
```c++
::WaitForSingleObject(hThread, INFINITE);
```
其中hThread是一个线程句柄,INFINITE表示无限等待,直到线程结束。
2.等待一个事件的触发:
```c++
DWORD dwRet = ::WaitForSingleObject(hEvent, dwTimeout);
if(dwRet == WAIT_OBJECT_0)
{
// 事件已经被触发
}
else if(dwRet == WAIT_TIMEOUT)
{
// 等待超时
}
else if(dwRet == WAIT_FAILED)
{
// 等待失败,可以通过GetLastError()获取错误码
}
```
其中hEvent是一个事件句柄,dwTimeout是等待超时时间(单位为毫秒),返回值为WAIT_OBJECT_0表示事件已经被触发,WAIT_TIMEOUT表示等待超时,WAIT_FAILED表示等待失败。
3.等待多个对象中的任意一个对象的信号状态:
```c++
DWORD dwRet = ::WaitForMultipleObjects(nCount, hObjects, bWaitAll, dwTimeout);
if(dwRet >= WAIT_OBJECT_0 && dwRet < WAIT_OBJECT_0 + nCount)
{
// 返回的是哪个对象触发了信号状态变化
}
else if(dwRet == WAIT_TIMEOUT)
{
// 等待超时
}
else if(dwRet == WAIT_FAILED)
{
// 等待失败,可以通过GetLastError()获取错误码
}
```
其中nCount表示对象数量,hObjects是一个对象句柄数组,bWaitAll表示是否等待所有对象的信号状态变化,dwTimeout表示等待超时时间。返回值为WAIT_OBJECT_0到WAIT_OBJECT_0+nCount-1之间的值,表示哪个对象触发了信号状态变化;WAIT_TIMEOUT表示等待超时;WAIT_FAILED表示等待失败,可以通过GetLastError()获取错误码。
阅读全文