WaitForSingleObject()

2011.04.11 11:02

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 );
            // 원하는 작업을 처리한다.
        }
    }

신고

'프로그래밍' 카테고리의 다른 글

WaitForSingleObject()  (0) 2011.04.11
다차원 트리 - KD Tree  (0) 2009.10.23