2
//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++のサンプルスニペットです。ワーカースレッドを使用してタスクを完了し、その結果をコントロールに送信します。どちらが望ましいか、他の何かの回避策がありますか?MFCでのワーカースレッドの使用
[MFC:別のスレッドからGUIにアクセスしますか?](http://stackoverflow.com/questions/18462347/mfc-accessing-gui-from-another-thread) –
重複しない可能性があります。以前のスレッドは、ケースIのみに関係しており、アドバイザリはMFC GUIスレッドでのワーカースレッドの使用を禁止していました。ケース2では、非同期優先順位キューを使用して状況を回避し、メインのGUIスレッドがポストメッセージを処理できるようにしようとしています – seccpur