C++ MFC中辅助线程的使用

C++ MFC中辅助线程的使用,c++,multithreading,visual-c++,C++,Multithreading,Visual C++,这是VC++中使用MFC的一个示例代码段,我想使用一个工作线程来完成任务并将结果发送到控件。哪一个是可取的或任何其他解决方法?通常最好(或必须)避免从主线程以外的其他线程直接访问GUI。MFC可以断言,也可以不断言,这取决于其实现的一致性。另见。这就排除了你的第一个病例 使用消息队列是安全和正确的方法。另请参阅如何从另一个线程更新UI。可能重复的不重复。早期的线程只涉及案例I,建议禁止在MFCGUI线程中使用工作线程。我的查询的案例二试图通过使用异步优先级队列并允许主GUI线程处理post消息来

这是VC++中使用MFC的一个示例代码段,我想使用一个工作线程来完成任务并将结果发送到控件。哪一个是可取的或任何其他解决方法?

通常最好(或必须)避免从主线程以外的其他线程直接访问GUI。MFC可以断言,也可以不断言,这取决于其实现的一致性。另见。这就排除了你的第一个病例


使用消息队列是安全和正确的方法。另请参阅如何从另一个线程更新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();
}