드문드문 데이터를 가져올 때, while문을 계속해서 돌리는 것은 비효율적이다.
#include <window.h>
HANDLE handle;
handle=CreateEvent(NULL,FALSE,FALSE,NULL)
::SetEvent(handle)
::WaitForSingleObject(handle,INFINITE)
::ResetEvent(handle)
::CloseHandle(handle)
HANDLE은 정수형처럼 어떤 숫자이다. 이 숫자는 이벤트에 대한 식별자키이다.
CreateEvent 함수를보면 인자가 총 네가지가 있다.
1) 첫번째 인자 : 보안속성
2) 두번째 인자 : 두번째 인자는 중요하다. 여기서 값은 bool 값이 들어가는데, Auto/Manual Reset을 나타낸다. 만약에 두번째 인자 값이 FALSE 라면 신호를 받고 다음애가 화장실에 들어가면 신호를 다시 바꿔준다. 반대로 TRUE라면 자동으로 되지않고, ::ResetEvent(handle) 명령어를 통해서 수동으로 빨간불을 켜줘야 한다.
3) 세번째 인자 : 세번째 인자는 Event는 신호의 초기값이다. FALSE라면 해당 값은 빨간불이고, True라면 해당 값으 초록불이다.
4) 네번째 인자 : 네번째 인자는 이벤트의 이름이다. 선택적으로 적으면 된다. 여기선 NULL을 주어 이름을 주지 않았다.
::WaitForSingleObject(handle,INFINITE) 해당 함수는 영원히 자면서 시그널을 기다린다.
::SetEvent(handle) 해당 이벤트가 시그널 상태이다.
::CloseHandle(handle) 핸들을 종료한다.
cf) 이 이벤트 동기화 방법은 프로세스간에 동기화를 할 때도 이용한다.
cf2) 그냥 :: 만 사용하게 되면
현재 존재하는 모든 전역변수와 전역함수들을 지역변수, 지역함수와 구분지어 사용할 수 있게된다.