在我的一个班级中,我使用以下方法启动一个线程:
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &myThread, NULL, 0, &threadID );
从这个线程我想调用一个必须从主线程调用的方法(该方法与UI交互)但我真的不知道怎么做,因为主线程不能等到“myThread”通知它。
我见过很多
while(true){
//wait something from myThread
}
但我不能这样等待!
有什么想法吗?
答案 0 :(得分:5)
由于您的主线程是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);
答案 1 :(得分:0)
您应该能够使用WaitForMultipleObjects等待一个或多个线程。
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