Повторение WaitForSingleObject в сообщениях между приложениями

Я создал две программы на 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);

Что случилось? Спасибо

1 ответ

Почему вы используете событие для этого? Используйте семафор - CreateSemaphore() API.

Даже при использовании (неуместного) события для этой сигнализации я бы не ожидал, что непрерывный цикл будет симптомом с одним производителем, одним потребителем и событием автоматического сброса - опубликуйте свой код.

Другие вопросы по тегам