WaitForSingleObject 관련 스레드 다루기
Program/C | C++ 2008. 1. 16. 09:44WaitForSingleObject() - 보통 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 |