[자료구조] 메시지 큐(Message Queue)
[자료구조] 메시지 큐(Message Queue)
스택, 큐, 덱 관련 자료구조를 정리하다가 메시지 큐도 궁금해서 정리하게 됨
메시지 큐 : 윈도우를 생성하거나 키보드를 누르거나 마우스를 움직일 때 생성되는 메시지가 쌓이는 메모리 공간
- 시스템 메시지 큐 : 사용자 입력 값들이 차곡차곡 쌓이게 되고 OS가 판단해서 활성화된 원도우에 사용자 입력 값들을 전달하게 됨
- 쓰레드 메시지 큐 : 사용자가 직접 접근하는 공간으로서 GetMessage, DispatchMessage함수 등에 의해서 접근 가능
- 먼저 키보드를 누르면 WM_KEYDOWN이라는 메시지가 생기고 OS 내부에 어떤 곳(메시지 큐)에 이 메시지가 쌓임
- GetMessage함수가 이 메시지를 가져옴
- 만약에 문자 키라면 TranslateMessage 함수가 WM_CHAR 메시지를 발생시키고
- DispatchMessage함수에 의해서 윈도우 프로시저로 전달
- 하지만 모든 메시지가 큐에 저장되는건 아님
- 메시지가 발생되자마자 메시지 큐에 쌓이지 않고 바로 윈도우 프로시저로 가는 메시지가 있는데, 이 메시지를 비큐(Non Queued) 메시지라고함
- 프로세스에 적어도 한 개 이상의 스레드가 생성이 되는데, 이때 쓰레드에서 윈도우를 만들지 않으면 메시지 큐 또한 생기지 않게 되어서 메시지를 받을 수 없음
출처
댓글
댓글 쓰기