0

我在 C(生产者和消费者)中创建了两个程序,它们相互发送消息(使用 CreateEvent、SetEvent 和 WaitForSingleObject)

我为每个程序实现一个线程以使用 WaitForSingleObject(myEvent, INFINITE) 等待消息来管理此消息

我将 WaitForSingleObject 放入循环中以重复并及时获取许多消息。

这在第一次工作正常,但其他时候 WaitForSingleObject 不等待消息,左侧代码在不定式循环中运行(再次包括 WaitForSingleObject)

我测试删除了两个程序的 CloseHandle(myEvent) 但没有结果

do {
//wait until the event received from another process
WaitForSingleObject(myrcvEvent, INFINITE);

//send the feeback event, if it is failed show a message
printf ("consumer: try to send the feedback event\n");
if (!SetEvent(myfeedbackEvent)) {
msgbox("consumer: Set feedbackEvent failed!");
        return;
 } else {

InvalidateRect(hWnd,NULL,TRUE); //redraw with new values
 }


//CloseHandle(myrcvEvent);
//CloseHandle(myfeedbackEvent);

Sleep(100);
} while(1);

怎么了?谢谢

4

1 回答 1

0

你为什么要为此使用事件?使用信号量 - CreateSemaphore() API。

即使为此信号使用(不适当的)事件,我也不希望持续循环作为一个生产者、一个消费者和一个自动重置事件的症状 - 发布您的代码。

于 2012-07-22T22:07:15.397 回答