WaitForSingleObject 관련 스레드 다루기

Program/C | C++ 2008. 1. 16. 09:44

WaitForSingleObject() - 보통 FindFirstChangeNotification, FindNext..., FindClose... 등과 쓰임
1. 용도

    Thread가 특정 signal이 발생할 때까지 정지해 있다가,
    signal을 받으면, 작업을 수행하고 다시 정지 상태로 돌아가게할 필요를
    자주 느끼게 된다.
    WaitForSingleObject()와 WaitForMultipleObjects()를 사용하여
    이런 need를 해결할 수 있다.
    이 함수들은 CreateEvent(), SetEvent(), ResetEvent()와 함께 사용한다.
   
2. WaitForSingleObject()

    이 함수는 하나의 Event object를 만들어 놓고,
    이 Event가 signal(SetEvent())될 때까지 기다린다.
   
    DWORD WaitForSingleObject(
      HANDLE hHandle,          // Event object handle
      DWORD dwMilliseconds // time-out interval. 단위는 millisecond
                                         // INFINITE 으로 설정할 경우, 무한정 기다린다.
    );
   
    return value:
        1) WAIT_FAILED: fail. GetLastError()로 원인을 알 수 있다. 이 경우는 logic을 빠져나간다.
        2) WAIT_ABANDONED: 이 경우는 Event object를 reset하고, 다시 WaitForSingleObject()를 호출한다.
        3) WAIT_OBJECT_0: 기다리던 Event가 signal된 경우.
        4) WAIT_TIMEOUT: time-out이 된 경우.
       
3. Sample code

    DWORD  ret;
   
    while( TRUE )  {
        ret = WaitForSingleObject( hHandle, INFINITE );
   
        if( ret == WAIT_FAILED )
            return 0;
        else if( ret == WAIT_ABANDONED ) {
            ResetEvent( hHandle );
            continue;
        }
        else if( WAIT_TIMEOUT )
            continue;
        else {
            ResetEvent( hHandle );
            // 원하는 작업을 처리한다.
        }
    }

'Program > C | C++' 카테고리의 다른 글

마우스 포인터를 이용한 윈도우 핸들  (0) 2008.01.16
CLR 정의  (0) 2008.01.16
VS2005 Remote Dubug  (0) 2008.01.16
: