wor*_*bin 4 windows winapi multithreading
SleepConditionVariableCS的MSDN页面指出了这一点
条件变量受到虚假唤醒(那些与显式唤醒无关)和被盗唤醒(另一个线程设法在唤醒线程之前运行).因此,您应该在睡眠操作返回后重新检查谓词(通常在while循环中).
因此,条件等待必须包含在while循环中,即
while (check_predicate())
{
SleepConditionVariableCS(...)
}
Run Code Online (Sandbox Code Playgroud)
如果我使用事件而不是条件变量,我可以在等待时使用while循环(WaitForSingleObject)来发信号通知事件吗?
因为WaitForSingleObject(),没有虚假的唤醒,所以你可以消除循环.
如果使用WaitForMultipleObjectsEx()带bAlertable=TRUE,MsgWaitForMultipleObjects()具备唤醒面膜,或MsgWaitForMultipleObjectsEx()用bAlertable=TRUE或唤醒面膜,然后等待可以在其他条件结束前的事件实际上是发出信号.
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |