Signaled vs Non-Signaled

Server/Winodw Network 2015. 11. 11. 11:59

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

 

 

State에 대한 이해

상태(State)라는 용어를 사용하는 이유는 변하기 때문이다.

커널 오브젝트도 Signaled와 Non-Signaled의 두 가지 상태를 가진다.

 

Signaled 상태는 신호를 받은 상태 , Non-Signaled는 신호를 받지 않은 상태이다.

 

프로세스 커널 오브젝트의 State에 대한 이해

- 커널 오브젝트의 상태는 리소스에 특정 상황이 발생하였음을 알려주기 위해서 존재하는 것

 

처음 커널 오브젝트가 생성되면 커널 오브젝트의 상태는 Non-Signaled의 상태가 된다.

그러다가 종료가 되면 Signaled 상태로 바뀐다.

 

또한 프로세스 커널 오브젝트의 상태는 일단 Signaled가 되서 절대로 다시 Non-Signaled 상태로

변경되지 않는다.

 

 

커널 오브젝트의 상태를 확인하는 함수

 

DWORD WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds );

 

1. 상태확인을 원하는 커널 오브젝트의 핸들을 인자로 넘긴다.

2. 커널 오브젝트가 Signaled 상태가 될 때까지 기다리는 시간

 

반환값

WAIT_OBJECT_0   :   커널 오브젝트가 Signaled 상태가 되었을 때 반환되는 값

WAIT_TIMEOUT :   커널 오브젝트가 Signaled 상태가 되지않고, dwMilliseconds 인자를 통해서

                           설정된 시간이 다 된 경우에 반환되는 값

WAIT_ABANDONED  :   소유 관계와 관련하여 함수가 정상적이지 못한 오류 발생에 의해서

                                 반환되는 경우에 반환되는 값이다.....

 

 

상태를 확인해야 할 커널 오브젝트가 둘 이상이고, 이들의 핸들이 배열로 묶여있다면 다음 함수를 활용하는 것이 바람직하다.

 

DWORD WaitForMultipleObjects (

DWORD  nCount,

const HANDLE* lpHandles,

BOOL bWaitAll,

DWORD dwMilliseconds );

 

1. 배열에 저장되어 있는 핸들 갯수

2. 핸들 저장하고 있는 배열의 주소 정보 전달.. 이 주소값 시작으로 총nCount개의 핸들이 관찰

    대상이 된다.

3. bWaitAll  :  관찰 대상이 모두 Signaled 상태가 되기를 기다리고자 하는지(TRUE 전달 시)

                    아니면 하나라도 Signaled상태가 되면 반환할 것인지(FALSE 전달 시)를 결정지음

4. dwMilliseconds :  WaitForSingleObject와 동일하다.

 

 

'Server > Winodw Network' 카테고리의 다른 글

이벤트 기반 동기화  (0) 2015.11.11
쓰레드 동기화  (0) 2015.11.11
Overlapped 모델(1)  (0) 2015.10.25
스레드의 우선순위 컨트롤  (0) 2015.10.12
프로세스, 스레드의 우선순위  (0) 2015.10.08
admin