C++ MFC中辅助线程的使用
这是VC++中使用MFC的一个示例代码段,我想使用一个工作线程来完成任务并将结果发送到控件。哪一个是可取的或任何其他解决方法?通常最好(或必须)避免从主线程以外的其他线程直接访问GUI。MFC可以断言,也可以不断言,这取决于其实现的一致性。另见。这就排除了你的第一个病例C++ MFC中辅助线程的使用,c++,multithreading,visual-c++,C++,Multithreading,Visual C++,这是VC++中使用MFC的一个示例代码段,我想使用一个工作线程来完成任务并将结果发送到控件。哪一个是可取的或任何其他解决方法?通常最好(或必须)避免从主线程以外的其他线程直接访问GUI。MFC可以断言,也可以不断言,这取决于其实现的一致性。另见。这就排除了你的第一个病例 使用消息队列是安全和正确的方法。另请参阅如何从另一个线程更新UI。可能重复的不重复。早期的线程只涉及案例I,建议禁止在MFCGUI线程中使用工作线程。我的查询的案例二试图通过使用异步优先级队列并允许主GUI线程处理post消息来
使用消息队列是安全和正确的方法。另请参阅如何从另一个线程更新UI。可能重复的不重复。早期的线程只涉及案例I,建议禁止在MFCGUI线程中使用工作线程。我的查询的案例二试图通过使用异步优先级队列并允许主GUI线程处理post消息来探索解决这种情况的方法
//Case I : ( It works but not sure if it is safe . Is it because the windows
messages are handle in a process queue already? )
void MyDlg::OnClickButton1()
{
std::thread([]()
{
// some long computation here
SetDlgItemText(IDC_STATIC_TEXT, L"Updated");
}).detach();
}
//Case II : ( It works . But is the process_queue redundant )
void MyDlg::OnClickButton1()
{
std::thread([]()
{
// some long computation here
command_node node =
command_factory("SetDlgItemText",IDC_STATIC_TEXT, "Updated");
SendMessageToMyProcessQueue(node);
}).detach();
}
void MyDlg::OnPaint()
{
ExecuteFromMyProcessQueue();
CDialogEx::OnPaint();
}