728x90

커널 오브젝트의 두 가지 상태

- non-signaled 상태 : 이벤트가 발생하지 않은 상태

- signaled 상태 : 이벤트가 발생한 상태, 해당 리소스가 특정 상황에 도달한 상태

- 두 상태를 통해 리소스의 상황을 인식

- 프로세스, 쓰레드가 끝날 때 해당 커널 오브젝트가 signaled 상태로 바뀜

 

커널 오브젝트의 상태 확인

- WaitForSingleObject : 성공 시 이벤트 정보(WAIT_OBJECT_0 ((STATUS_WAIT_0) + 0), 실패 시 WAIT_FAILED(0xffffffff) 반환

    -> 전달한 커널 오브젝트가 signaled 상태인지 확인하기 위한 함수

    -> 타임아웃 값을 전달하여 그 안에 signaled 상태가 되기 전에는 반환하지 않음. INFINITE(0xffffffff) 전달 시 무한 대기

DWORD WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds);

- WaitForMultipleObject : 성공 시 이벤트 정보, 실패 시 WAIT_FAILED 반환

    -> nCount : 검사할 커널 오브젝트의 수

    -> lpHandles : 핸들 정보를 담고 있는 배열의 주소 값

    -> bWaitAll : TRUE 전달 시 모든 커널 오브젝트가 signaled 상태가 되어야 반환, FALSE 전달 시 하나라도 signaled 상태가 되면 반환

DWORD WaitForMultipleObjects (DWORD nCount, CONST HANDLE *lpHandles, 
						WINBOOL bWaitAll, DWORD dwMilliseconds);

- 호출된 함수가 반환되면서 자동으로 non-signaled 상태로 변경되는 커널 오브젝트를 auto-reset 모드 커널 오브젝트라 하고 그렇지 않은 커널 오브젝트를 manual-reset 모드 커널 오브젝트라 함

728x90

+ Recent posts