1 minute read

윈도우의 프로세스와 스레드 (8)

이벤트

이벤트는 지금까지 언급했던 동기화 객체들과 다소 차이가 있습니다.

지금까지 말한 커널 객체나 크리티컬 섹션은 운영체제에 의해 영위되는 전자동식 운영이였다면 이벤트는 자동이아니라

수동으로 운영됩니다.

즉 프로그래머의 의도에 의한 컨텍스트 전환이 가능해집니다.

이벤트는 일종의 전기 스위치로 볼수있습니다.

이 전기 스위치는 두가지가 있으며 일반적으로는 보통 볼수있는 on/off 스위치와 작업이 끝나면 자동으로 꺼지는 스위치가있습니다.

윈도우에서는 전자를 수동 재설정 이벤트라고 하며 후자를 자동이벤트라고합니다.

이 두가지의 차이점은 아주 명백하여 수동 재설정 이벤트는 명시적으로 켜거나 끄지않으면 항상 원래 있던 상태를 유지하고 있으며

자동이벤트는 항상 꺼져있는 상태로 유지되다가, 스위치를 누르면 특정 작업을 수행하는 순간만 켜져있고 작업이 끝나면 도로 꺼져버리는 특성이있습니다.

이벤트 역시 핸들러로 지원되는 커널 객체 입니다.

이벤트는 프로세스사이 혹은 스레드 사이에서 통신할수있으며 프로세스 사이에서 통신하는것도 스레드와 동일한 코드를 사용하게됩니다.

이벤트는 특정 이벤트 객체의 상태를 파악하여 모든 작업을 제어합니다.

따라서 상대적으로 단순한 구조를 가지고있습니다.

또한 ACL 을 올바르게 설정하였다면 다른 스레드는 물론 프로세스에서도 해당 이벤트를 같은 이름으로 받을수있습니다.

다만 프로세스사이에서 통신이 이루어질경우에는 이벤트 이름형식을 정확히 설정해줘야합니다.

대기 타이머 및 타이머 큐

지금부터 언급하는 내용들은 근본적으로 위에서 언급된 루틴과는 다릅니다.

Sleep 함수와 같은 비슷한 개념으로 동작하게 되는데 , 즉 일정시간의 유예를 둔뒤 해당시간이 지나면 자동으로 해당작업을 멈춰버리는 방법입니다.

타이머는 뮤텍스나 세마포어처럼 명시적으로 스레드 동기화에 관여하지 않으므로 실제로 동기함수라기보다는 특별한 경우에만 주로 사용됩니다.

이는 Sleep 함수보다 시스템을 좀더 효율적으로 다룬다는 특징일뿐입니다.

따라서 Sleep 이 필요한 시점에서 대기 타이머나 타이머큐를 사용하는것을 권합니다.

타이머 큐는 단순히 일정시간을 기다리는 콜백함수이며 대기타이머는 단순히 기다리는것이 아니라 이벤트같이 on/off를 구분하는 상태를 나타낼수도있고 특정시간이

지나면 주기적으로 활성화되는 형태를 나타내기도 합니다.

대기타이머 역시 이벤트와 비슷하게 수동타이머와 동기타이머가 존재합니다.

동기 타이머가 이벤트 자동타이머와 비슷한 구실을 하며 그외에 주기 타이머가 있습니다.

문법은 이벤트와 거의 흡사하며 동기화에서 그렇게 많이 사용되지 않으므로 더 자세한 내용을 원한다면 MSDN 에서 사용법을 참고해야합니다.

Reference

https://karfn84.tistory.com/entry/%ED%8E%8C%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9C%88%EB%8F%84%EC%9A%B0%EC%9D%98-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C

Categories:

Updated: