Thread Message Queue
- Thread당 하나씩 메시지큐가 생긴다
- 메시지 큐는 언제 생성되나
- 정확히는 Thread에서 GUI관련 요소를 만들거나,
- 메시지 큐가 필요한 함수를 사용시 생성이 된다.
메시지큐를 통하여 두 Thread상에 통신을 해보자
보통 메시지 통신을 SendMessge(), PostMessage()
를 통해서 하는데
메시지를 받을 Thread에 메시지 queue가 없을 수 있어
메시지를 받았는지 못받았는지 확인할 수 있는 PostThreadMessage
를 통해서 메시지를 보내보자
#include <stdio.h>
#include <Windows.h>
#include <tchar.h>
#include <process.h>
UINT __stdcall foo(void* p)
{
// 이 Thread는 queue가 없다.
while(1)
{
printf("foo\n");
}
return 0;
}
int main()
{
UINT tid = 0;
HANDLE h = (HANDLE)_beginthreadex(0, 0, foo, 0, 0, &tid);
Sleep(1000);
BOOL b = PostThreadMessage(tid, WM_APP + 100, 10, 20);
printf("result : %d\n", b); // 0 : 실패
return 0;
}
queue를 생성하는 Thread를 만들어 보자
UINT __stdcall foo(void* p)
{
// 방법.1 - GUI요소 만들기
HWND hwnd = CreateWindowEx(0, _T("button"), _T("ok"), WS_OVERLAPPEDWINDOW,
0, 0, 300, 300, 0, 0, 0, 0);
ShowWindow(hwnd, SW_SHOW);
// or
while(1)
{
// 방법.2 메시지 큐를 쓰기
MSG msg;
GetMessage(&msg, 0, 0, 0);
if(msg.message == WM_APP + 100)
{
printf("메시지 도착 : %d, %d\n" msg.wParam, msg.lParam);
}
else if(msg.message == WM_APP + 200)
{
break;
}
printf("foo\n");
}
return 0;
}