삽질의 현장/- 윈도우 시스템

#026_WIndow_System_커널 모드 동기화 객체_메시지

shovelman 2015. 9. 25. 01:19


안녕하세요 삽잡이입니다.


이번 시간에는 커널 동기화 객체들의 신호 상태를 기다리는 

WaitForSingleObject 함수의 반환 코드에 대해서 알아보려고 합니다.


우선, WaitForSingleObject 함수는 

두번째 인자의 시간까지 상태 확인을 원하는 커널 오브젝트를 기다립니다.


WaitForSingleObject 함수를 통해 해당 커널 오브젝트가

어떻게 종료됬는지, 혹은 상태에 대해서 파악할 수 있기 때문에 

몇가지 종료 코드에 대해서 알아보도록 하겠습니다.


우선, WAIT_OBJECT_0 코드는 

정상적인 신호 상태를 검출했을 때 반환 되는 코드입니다.


뮤텍스는 소유권을 가지고 있기 때문에

해당 뮤텍스의 소유권을 포기할 수 있는 놈은 자기 자신 밖에 없습니다.

그런데, 반환하지 않고 쓰레드가 종료된다면, 소유한 뮤텍스를 Release를 못했다는 것이기 때문에

WAIT_ABANDONED 메시지를 반환합니다.


WaitForSingleObject 함수의 두번째 인자가 INFINITE라면 상관 없겠지만,

시간을 정해두고 Time Out이 되고도 Release를 하지 못하면

WAIT_TIMEOUT 코드를 반환합니다.


마지막으로 핸들에 문제가 발생했을 때 WAIT_FAILED 코드를 반환합니다.


이상 삽잡이였습니다!