더북(TheBook)

앞의 예시를 봅시다. 스레드 1은 이벤트에서 신호가 있을 때까지 잠을 잡니다. 스레드 2는 이벤트에 신호를 보냅니다. 그러면 이벤트를 기다리고 있던 스레드 1은 잠에서 깨어 나머지 프로그램을 계속 실행합니다.

이벤트는 스레드 간 소통하며 일을 처리해야 할 때 유용합니다. 예를 들어 스레드 1에서 무슨 일을 마친 후 그것을 스레드 2에 알린다든지 할 수 있습니다.

윈도에서는 이벤트가 자동 이벤트(automatic event)와 수동 이벤트(manual event)라는 이벤트 모드를 취할 수 있습니다. 자동 이벤트 모드에서는 이벤트가 신호를 가질 때, 즉 이벤트 상태 값이 1이 되었을 때 이벤트를 기다리던 스레드가 있으면 그 스레드를 깨웁니다. 그리고 상태 값이 ‘자동’으로 0으로 바뀝니다.

수동 이벤트 모드에서는 이벤트 상태 값이 1이 되었을 때 이벤트를 기다리던 스레드가 깹니다. 그러나 상태 값은 여전히 1로 남습니다. 이를 0으로 바꾸는 것은 여러분이 ‘수동’으로 해야 합니다. 다음 예시 코드처럼요.

Event event1;
 
void Thread1()
{
  // 이벤트가 신호를 일으킬 때까지 기다린다.
  event1.Wait();
  event1.SetEvent(0); // 이벤트 상태 값을 0으로 바꾼다.
}
 
void Thread2()
{
  // 이벤트에 신호를 준다.
  event1.SetEvent();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.