C++主线程的调用方法

C++ call method from the main Thread

本文关键字:调用 方法 线程 C++      更新时间:2023-10-16

在我的一个类中,我使用以下方法启动了一个线程:

HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &myThread, NULL, 0, &threadID );

从这个线程中,我想调用一个必须从主线程调用的方法(该方法正在与 UI 交互),但我真的不知道该怎么做,因为主线程不能等到"myThread"通知它。

我见过很多

while(true){
  //wait something from myThread
}

但我等不及这样了!

有什么想法吗?

由于您的主线程是 UI,因此您可以向其发送消息。

#define WM_USER_EXECUTE_MY_CODE (WM_USER + 1000)

UI 消息循环应处理消息:

// API code
// LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
// create message map yourself if you're using MFC
if (iMsg == WM_USER_EXECUTE_MY_CODE)
{
    // execute your code must run in main thread
}

在工作线程中,向 UI 发送消息

// HWND hwnd = handle to main UI window
// if you need some parameters, send them through WPARAM or LPARAM
SendMessage(hwnd, WM_USER_EXECUTE_MY_CODE, 0, 0);  

您应该能够使用 WaitForMultipleObject 等待一个或多个线程。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx

例:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms687055(v=vs.85).aspx