函数原型:
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; }