다른 매개 변수를 사용하여 모든 서브 루틴을 반복적으로 호출하는 다중 스레드가있는 MFC 코드가 있습니다. 서브 루틴의 시작 부분에서 , 나는 전화가 CheckKillEvent()을 작동 할 수 있도록 :여러 스레드가 하나의 수동 킬 이벤트에 의존 할 수 있습니까?
bool CTestShellDlg::CheckKillEvent()
{
DWORD waitS;
waitS = WaitForSingleObject(h_KillEvent, 0);
switch (waitS)
{
case WAIT_OBJECT_0:
return true;
break;
case WAIT_TIMEOUT:
return false;
break;
default:
IERROR
break;
}
}
및 리턴() CheckKillEvent가 true를 돌려주는 경우 즉시.
h_KillEvent = CreateEvent(NULL, true, false, NULL);
즉, 그것은 수동 리셋이 있습니다로
참고로, h_killEvent가 초기화됩니다.
그러나, 이러한 스레드가 나는 아래와 같은 킬 이벤트 설정 한 후 완료 영원히 (문자 그대로) 걸릴 것 : 질문은
bool CTestShellDlg::KillThreads()
{
//Signall the killing event
SetEvent(h_KillEvent);
if (WaitForMultipleObjects(,,true,)==...)
{
ResetEvent(h_KillEvent);
return true; //Killing successful
}
else
return false; //Killing failed
}
를 여러 스레드에서 CheckKillEvent()를 호출에 문제가있다 ? WaitForSingleObject()가 중요한 섹션이나 다른 것 안에서 처리되어야합니까? 아니면 단순히 내 재귀 코드가 더 이상 자신을 호출하지 않는 지점으로 되 돌리는 데 좋지 않습니까?
아니요, 이런 종류의 코드는 일반적으로 정상적으로 작동합니다. CheckKillEvent()를 호출하지 않는 운영 체제 호출에 스레드가 걸리면 차단됩니다. 디버거의 Threads 창에서 쉽게 찾을 수 있습니다. –
감사합니다. 그래, 일부 디버깅 후 작동 있어요. 그 주석을 답으로 추가하고 싶을 수도 있습니다. –