커널 오브젝트의 두 가지 상태
- 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 모드 커널 오브젝트라 함
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 20-2. 커널모드 동기화 기법 (0) | 2021.04.11 |
---|---|
열혈 TCP/IP 20-1. 동기화 기법의 분류와 CRITICAL_SECTION 동기화 (0) | 2021.04.11 |
열혈 TCP/IP 19-2. 윈도우 기반의 쓰레드 생성 (0) | 2021.04.11 |
열혈 TCP/IP 19-1. 커널오브젝트(Kernel Objects) (0) | 2021.04.11 |
열혈 TCP/IP 18-5. 쓰레드의 소멸과 멀티쓰레드 기반의 다중접속 서버의 구현 (0) | 2021.03.28 |