컴퓨터 공부/Win32 API 프로그래밍

[5월 11일 3교시] 동기화 2

려리군 2009. 5. 11. 16:34

이벤트 

사건이 일어났음을 알려주는 동기화 객체.

쓰레드 간의 작업 순서나 시기를 조정하기 위해 사용.

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으로 제어.