PostThreadMessage使用

函数原型:

BOOL WINAPI PostThreadMessage(_In_ DWORD idThread,_In_ UINT Msg,_In_ WPARAM wParam,_In_ LPARAM lParam);

idThread -      [in] Type: DWORD The identifier of the thread to which the message is to be posted.

Msg     -       [in] Type: UINT The type of message to be posted.

wParam -        [in] Type: WPARAM Additional message-specific information.

lParam -        [in] Type: LPARAM Additional message-specific information.

 

1、创建worker thread,worker thread中包括消息循环。

2、worker thread发送TALK_MESSAGE,弹出提示“Worker Thread

3、worker thread发送WM_QUIT, worker thread将报告给主线程自己要退出了,然后结束自己的生命周期。

DWORD ThreadProc(LPVOID lParam)
{
        MSG msg;
        while(GetMessage(&msg,0,0,0))
        {
                if(msg.message == TALK_MESSAGE)
                {
                        MessageBox(NULL,L"Hi",L"Worker Thread",MB_OK);
                }
                DispatchMessage(&msg);
        }

        MessageBox(NULL,L"Thread will close by pressing OK",L"From Worker Thread",MB_OK);
        AfxGetApp()->m_pMainWnd->PostMessageW(TALK_MESSAGE+1,0,0);
        return 0;
}

void CPostThreadMSGDlg::OnBnClickedOk()
{
        CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,0,0,&m_dwThread);
        ::MessageBox(NULL,L"Worker Thread Created!",L"From main Thread",MB_OK);
        OnOK();
} 

void CPostThreadMSGDlg::OnBnClickedButtonHi()
{
        PostThreadMessage(m_dwThread,TALK_MESSAGE,0,0);
}

 

void CPostThreadMSGDlg::OnBnClickedButtonCllose()
{
        PostThreadMessage(m_dwThread,WM_QUIT,0,0);
}

 

LONG CPostThreadMSGDlg::OnWorkerThreadQuitFunction(WPARAM wParam, LPARAM lParam)
{     
        ::MessageBox(NULL,L"Main thread have known Worker Thread died!",L"From main Thread",MB_OK);

        return 0;
}

 

 

原文地址:https://www.cnblogs.com/licb/p/2654476.html