線程的消息循環如下:
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
if (!lpParam)
return 0;
HWND hWnd = (HWND)(lpParam);
bool bRet = false;
MSG msg;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
}
else
{
if (msg.message != WM_MAIN_MSG)
continue;
//TranslateMessage(&msg);
//DispatchMessage(&msg);
//交給線程自己處理消息
switch (msg.wParam)
{
case WM_TEST1:
{
Sleep(5000);
PostMessage(hWnd, WM_MAIN_MSG, WM_TEST1, NULL);
}
break;
case WM_TEST2:
{
Sleep(5000);
SendMessage(hWnd, WM_MAIN_MSG, WM_TEST2, NULL);
}
break;
}
}
}
return bRet;
}
主線程如何通知子線程呢?
PostThreadMessage(m_dwThreadID, WM_MAIN_MSG, WM_TEST1, 0);
其中m_dwThreadID是線程的ID,通過PostThreadMessage向指定的線程發送消息。