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