コントロールにポインターを渡すよりも、MFC ui コントロールをハンドルとしてスレッドに渡す方が安全であることをどこかで読んでいます。
オプション 1 - 静的テキストへのポインターを渡します。
TestDialog dlg1;
::_beginthreadex(NULL, 0, &tSetTextByPointer, &dlg1.m_StaticText, 0, NULL);
dlg1.DoModal();
UINT WINAPI tSetTextByPointer(LPVOID arg)
{
CStatic * pStaticText = static_cast<CStatic*>(arg);
Sleep(3000);
pStaticText->SendMessage(WM_SETTEXT, 0, (LPARAM)L"text");
return 0;
}
オプション 2 - ハンドルを渡します:
TestDialog dlg1;
::_beginthreadex(NULL, 0, &tSetTextByHandle, &(dlg1.m_StaticText.m_hWnd), 0, NULL);
dlg1.DoModal();
UINT WINAPI tSetTextByHandle(LPVOID arg)
{
HWND * pTextHandle = static_cast<HWND*>(arg);
Sleep(3000);
::SendMessage(*pTextHandle, WM_SETTEXT, 0, (LPARAM)L"text");
return 0;
}
複数のスレッドでコントロールにアクセスする場合、ハンドルを使用することを本当に好むべきでしょうか? それとも、コントロールにアクセスするときのスレッド セーフの問題をカバーするために、SendMessage() に依存するだけで十分ですか?