//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 ++中的示例代码段,我想使用工作线程来完成任务并将结果发送到控件。哪个是可取的或任何其他工作?
答案 0 :(得分:1)
除了主线程之外,不要直接从其他线程访问GUI,这通常是一个好主意(或必需)。 MFC可能断言,也可能不断言,具体取决于它的实现方式。另见this answer。所以这排除了你的第一个案例。
使用消息队列是安全且正确的方法。另请参阅this thread有关如何从其他线程更新UI的信息。