在MFC中使用工作线程

时间:2016-08-26 06:49:15

标签: c++ multithreading visual-c++

//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();
}

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

1 个答案:

答案 0 :(得分:1)

除了主线程之外,不要直接从其他线程访问GUI,这通常是一个好主意(或必需)。 MFC可能断言,也可能不断言,具体取决于它的实现方式。另见this answer。所以这排除了你的第一个案例。

使用消息队列是安全且正确的方法。另请参阅this thread有关如何从其他线程更新UI的信息。