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 |