이벤트
사건이 일어났음을 알려주는 동기화 객체.
쓰레드 간의 작업 순서나 시기를 조정하기 위해 사용.
HANDLE WINAPI CreateEvent(__in_opt LPSECURITY_ATTRIBUTES lpEventAttributes, __in BOOL bManualReset, __in BOOL bInitialState, __in_opt LPCTSTR lpName);
참고주소 : http://msdn.microsoft.com/en-us/library/ms682396(VS.85).aspx
이름이 있거나 없는 이벤트 객체를 열거나 생성한다. 객체에 접근 마스크를 설정하고 싶으면 CreateEventEx함수를 사용하면 된다.
lpEventAttributes : SECURITY_ATTRIBUTES 구조체의 포인터. NULL이면 자식 프로세스로 상속되지 않는 핸들을 만든다.
bManualReset : TRUE면 수동 리셋 이벤트, FALSE면 자동 리셋 이벤트를 만든다.
bInitialState : TRUE면 이벤트 객체 초기 상태는 신호상태, FALSE면 비신호상태다.
lpName : 이벤트 객체의 이름. 이름은 MAX_PATH만큼으로 제한된다. 이름 비교는 대소문자를 구분한다.
자동 리셋 : 대기 상태가 종료되면 WaitForSingleObject에 의해 자동으로 비신호상태로
수동 리셋 : 신호상태를 유지.
HANDLE WINAPI OpenEvent(__in DWORD dwDesiredAccess, __in BOOL bInheritHandle, __in LPCTSTR lpName);
참고주소 : http://msdn.microsoft.com/en-us/library/ms684305.aspx
현재 존재하는 이름 있는 이벤트 객체를 연다.
리턴 : 성공시 이벤트 객체의 핸들. 실패시 NULL
dwDesiredAccess : 이벤트 객체 접근 권한. 보안 디스크립터는 호출한 프로세스를 위한 요구된 접근을 허가하지 않는다면 함수는 실패한다.
bInheritHandle : TRUE면 이 프로세스에 의해 생성된 프로세스들은 핸들을 상속할 것이고 FALSE면 상속하지 않을 것이다.
lpName : 열고자 하는 이벤트의 이름.
BOOL WINAPI SetEvent(__in HANDLE hEvent);
참고주소 : http://msdn.microsoft.com/en-us/library/ms686211.aspx
특정 이벤트 객체를 신호 상태로 설정한다.
리턴 : 성공시 TRUE, 실패시 FALSE
hEvent : 이벤트 객체의 핸들. CreateEvent나 OpenEvent 함수는 이 핸들을 리턴한다. 핸들은 EVENT_MODIFY_ACCESS 권한을 가져야 한다.
BOOL WINAPI ResetEvent(__in HANDLE hEvent);
참고주소 : http://msdn.microsoft.com/en-us/library/ms685081(VS.85).aspx
특정 이벤트 객체를 비신호 상태로 설정한다.
리턴 : 성공시 TRUE, 실패시 FALSE
hEvent : 이벤트 객체의 핸들. CreateEvent나 OpenEvent 함수는 이 핸들을 리턴한다. 핸들은 EVENT_MODIFY_ACCESS 권한을 가져야 한다.
모달 프로세스
부모 프로세스가 차일드 프로세스 종료때까지 대기하는 현상.
비신호상태인 경우에도 메세지 처리 필요-> WaitForSingleObject를 timeout block이나 nonblock으로 제어.
'컴퓨터 공부 > Win32 API 프로그래밍' 카테고리의 다른 글
[5월 12일 2교시] 전역 후킹(미완성) (0) | 2009.05.12 |
---|---|
[5월 12일 1교시] DLL (0) | 2009.05.12 |
[5월 11일 2교시] 동기화 1 (0) | 2009.05.11 |
[5월 11일 1교시] 멀티 쓰레드 2 (0) | 2009.05.11 |
[5월 8일 3교시] 메모리 2 + 멀티 쓰레드 1 (0) | 2009.05.08 |