너무나 잘 알려진 이야기지만, 윈도우는 Event Driven 방식에 의해서 동작한다. 윈도우는 메세지 큐를 가지고 있으며, 윈도우가 생성하는 메세지는 이 메세지 큐를 이용하여 처리된다.
그렇지만, 중요한 것은 모든 메세지가 메세지 큐에 저장되는 것은 아니라는 점이다. 예를 들어, MFC의 CWnd 파생 개체들은 PreTranslateMessage()라는 메서드에서 메세지 큐에 들어있는 메시지를 미리 처리할 수 있는 기회를 가질 수 있는데, 가끔 원하는 메세지를 찾을 수 없는 경우가 있을 것이다. 그 이유는, 윈도우가 특정 메세지는 메세지 큐로 보내지 않고 바로 처리하기 때문이다. 또, 특정 메세지는 반드시 처리한다는 보장도 없다.
그러한 메세지 중 대표적인 것인 WM_TIMER 메세지이다. WM_TIMER 메세지는 주어진 시간 주기 동안 계속해서 발생되지만 이 메세지가 메세지 큐에 저장되는 것은 아니며, 또 메세지를 처리하는데 시스템 상황이 여의치 않다면 이 메세지를 처리하지 않는다. 윈도우가 강한 RTOS로서의 특징을 가지지 못하는 이유 중 하나다.
윈도우 프로그래밍을 하고 있다면 메세지 핸들러를 다루는데 매우 익숙하겠지만, 어떤 메세지가 메세지 큐에 쌓이는지, 어떻게 처리되는지는 관심을 기울이지 않는 경우가 많다. 간단하지만 지나치기 쉬운 부분이다.
그렇지만, 중요한 것은 모든 메세지가 메세지 큐에 저장되는 것은 아니라는 점이다. 예를 들어, MFC의 CWnd 파생 개체들은 PreTranslateMessage()라는 메서드에서 메세지 큐에 들어있는 메시지를 미리 처리할 수 있는 기회를 가질 수 있는데, 가끔 원하는 메세지를 찾을 수 없는 경우가 있을 것이다. 그 이유는, 윈도우가 특정 메세지는 메세지 큐로 보내지 않고 바로 처리하기 때문이다. 또, 특정 메세지는 반드시 처리한다는 보장도 없다.
그러한 메세지 중 대표적인 것인 WM_TIMER 메세지이다. WM_TIMER 메세지는 주어진 시간 주기 동안 계속해서 발생되지만 이 메세지가 메세지 큐에 저장되는 것은 아니며, 또 메세지를 처리하는데 시스템 상황이 여의치 않다면 이 메세지를 처리하지 않는다. 윈도우가 강한 RTOS로서의 특징을 가지지 못하는 이유 중 하나다.
윈도우 프로그래밍을 하고 있다면 메세지 핸들러를 다루는데 매우 익숙하겠지만, 어떤 메세지가 메세지 큐에 쌓이는지, 어떻게 처리되는지는 관심을 기울이지 않는 경우가 많다. 간단하지만 지나치기 쉬운 부분이다.