信号无论调用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;
}
}

本文通过一个具体的C++示例展示了如何在Windows环境下使用CreateEvent、SetEvent及WaitForSingleObject来管理和同步线程。具体地,示例程序创建了一个事件对象并反复触发该事件,而另一个线程则等待此事件被触发。
506

被折叠的 条评论
为什么被折叠?



