信号无论调用setevent设置多少次触发信号,只要 WaitForSingleObject等待到一次信号,则信号自动设置为非触发状态。
HANDLE fCondition = NULL;
unsigned int WINAPI _Entry(LPVOID inThread);
int main(int argc, char * argv[])
{
fCondition = ::CreateEvent(NULL, FALSE, FALSE, NULL);
unsigned int theId = 0; // We don't care about the identifier
HANDLE fThreadID = (HANDLE)_beginthreadex( NULL, // Inherit security
0, // Inherit stack size
_Entry, // Entry function
(void*)NULL, // Entry arg
0, // Begin executing immediately
&theId );
while(1)
{
for (int i =0;i < 100 ;i ++)
{
SetEvent(fCondition);
}
cout << "准备休息...." << endl;
Sleep(5000);
}
return 0;
}
unsigned int WINAPI _Entry(LPVOID inThread)
{
while(true)
{
DWORD theErr = WaitForSingleObject(fCondition,INFINITE);
Assert((theErr == WAIT_OBJECT_0) || (theErr == WAIT_TIMEOUT));
cout << "抢到了" << endl;
}
}