是否正在等待一个虚假的唤醒事件?

SleepConditionVariableCS的MSDN页面声明

条件variables会受到虚假的唤醒(与明确唤醒不相关的唤醒)和被盗唤醒(另一个线程在唤醒线程之前运行)的影响。 因此,在睡眠操作返回之后,应该重新检查谓词(通常在while循环中)。

结果,有条件的等待必须被包含在一个while循环中

while (check_predicate()) { SleepConditionVariableCS(...) } 

如果我要使用事件而不是条件variables,可以在等待( WaitForSingleObject )等待事件发送信号的时候使用while循环吗?

对于WaitForSingleObject() ,没有虚假的唤醒,所以你可以消除循环。

如果在bAlertable=TRUE ,带有唤醒掩码的MsgWaitForMultipleObjectsEx()或带有bAlertable=TRUE MsgWaitForMultipleObjectsEx()或唤醒掩码中使用WaitForMultipleObjectsEx() ,则可以在实际发送事件之前等待其他条件。