線程的消息循環舉例

線程的消息循環如下:

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向指定的線程發送消息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章