2013-09-25 9 views
0

나는 while 루프를 제어 (일시 중지 및 재개)하기 위해 수동 재설정 이벤트 이 있습니다. 따라서 루프에서 이벤트 신호 상태를 계속 확인해야합니다.while 루프에서 WaitForSingleObject를 계속 호출하는 것이 좋습니다.

void my_loop() 
{ 
    while(is_ok) 
    { 
     // Check whether event is in signaled state 
     dwWaitResult = WaitForSingleObject( 
      ghEvent, // event handle 
      INFINITE); // indefinite wait 

     switch (dwWaitResult) 
     { 
      // Event object was signaled 
     case WAIT_OBJECT_0: 
      printf("my_loop is working"); 
      break; 

      // An error occurred 
     default: 
      printf("my_loop is halted"); 
      break; 
     } 

    } 
} 

이 좋은 방법입니까? 지속적으로 WaitForSingleObject (CPU, 메모리 등) 문제가 발생합니까?

이 경우 이벤트 상태를 확인하는 더 나은 방법이 있습니까?

답변

0

수동 재검색 이벤트을 선택하면 이벤트가 설정되어있는 동안 루프가 사용 중 (100 % CPU)이됩니다. 따라서 코드를 다시 설정해야 이벤트가 재설정되거나 WAIT_OBJECT_0 사례에서 이벤트를 재설정하는 것을 잊었습니까?

이 좋은 방법입니까? 글쎄, 이벤트가 설정되지 않은 경우이 코드는 대기 중일뿐입니다 (INFINITE). 그러나 이벤트가 설정되면 이벤트를 재설정하기 위해 폴링 중일뿐입니다. WAIT_OBJECT_0 케이스에서 다른 작업을하고 싶다고 의심하고 외부 제어 권한이 필요합니다. 그렇게하면 루프에서 WaitForSingleObject을 사용하는 데 문제가 없습니다.

+0

예, 다른 함수는 ResetEvent 및 SetEvent를 호출하여 이벤트 상태를 전환 할 수 있으므로 해당 루프가 일시 중지되었다가 다시 시작됩니다. 내 루프가하는 일에 대해 걱정하지 마십시오. WaitForSingleObject를 호출하면 계속해서 문제 (CPU, 메모리, ...)가 발생하는지 묻습니다. ?? 아니면 이벤트 상태를 확인하는 더 좋은 방법이 있습니까? – onmyway133

+1

다음과 같이 : _ 루프에는 WaitForSingleObjectin을 사용하여 문제가 없습니다. 그러나 [중요 섹션 개체] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530%28v=vs.85%29.aspx) 또는 [동기화 개체] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686364%28v=vs.85%29.aspx) 일반적으로. – Arno

+0

루프 사이클 수를 외부 제어 할 생각이 듭니다. 이러한 접근법에 대해서는 [세마포어 개체] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685129%28v=vs.85%29.aspx)를 조사해야합니다. – Arno