이벤트가 신호를 받았음에도 불구하고 때때로 WaitForSingleObject
이 시간 초과를 기다리는 것으로 보입니다.WaitForSingleObject가 신호를 놓친 이유는 무엇입니까?
신호 스레드가 매번 SetEvent()
에서 성공을 수신합니다. 그러나 신호를받는 스레드가 항상 신호를 듣지는 않습니다. 신호 스레드에 중복 SetEvent()
을 추가하면 문제가 해결됩니다.
분명히 뭔가가 저조합니다. 가능한 원인은 무엇입니까?
// Signalling Thread
if (SetEvent(waitEvent))
consoleprintf(L"\r\nEvent Set.");
그리고는 또는이 신호 도착 지연 시간을 기다려야한다. 하지만 항상 신호를받지는 않습니다.
waitEvent = CreateEvent(
NULL, // default security attributes
FALSE, // auto-reset event
FALSE, // initial state is nonsignaled
TEXT("WaitEvent") // object name
);
for(;;)
{
dwWaitResult = WaitForSingleObject(waitEvent, // event handle
5000);
switch (dwWaitResult)
{
// Event object was signaled
case WAIT_OBJECT_0:
consoleprintf(L"\r\nSuccess.");
break;
case WAIT_FAILED:
//break;
case WAIT_ABANDONED:
consoleprintf(L"\r\nWait failed.");
break;
case WAIT_TIMEOUT:
consoleprintf(L"\r\nWait Timed out: %d", waitTime);
break;
default:
break;
}
}
문제의 스레드에서 'ResetEvent'와 (과) WaitForSingleObject 사이의 사이드 스레드에는 SetEvent가 없습니다. 이것은 귀하의 설명과 언급 된 행동의 가능한 이유와 일치합니다. –
반대로,'WaitForSingleObject' 바로 다음에'ResetEvent'를 호출하십시오. 그렇지 않으면 콘솔 프린트 중에 발생하는 Set이 Reset에 의해 clobbered 될 수 있습니다. –
@ 500-InternalServerError 이벤트가 자동 재설정 된 경우에도이 문제가있었습니다. 아직도 이해가 되겠습니까? – MandoMando