SleepConditionVariableCS的MSDN页面说明了
条件变量受到虚假唤醒(那些不是 与明确的唤醒相关联和被盗的唤醒(另一个线程 设法在唤醒线程之前运行。因此,你应该重新检查 睡眠操作后的谓词(通常在while循环中) 回报。
因此,条件等待必须包含在while循环中,即
while (check_predicate())
{
SleepConditionVariableCS(...)
}
如果我使用events代替条件变量,我可以在等待(WaitForSingleObject)时取消while循环以便发出信号吗?
答案 0 :(得分:7)
对于WaitForSingleObject()
,没有虚假的唤醒,所以你可以消除循环。
如果您使用WaitForMultipleObjectsEx()
bAlertable=TRUE
,MsgWaitForMultipleObjects()
使用唤醒模板,MsgWaitForMultipleObjectsEx()
使用bAlertable=TRUE
或使用唤醒模板,那么等待可以结束在事件实际发出信号之前的其他条件。