gpt4 book ai didi

c++ - 将 MFC 控件传递给线程还是传递句柄?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:15 26 4
gpt4 key购买 nike

我在某处读到,将 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() 来解决访问控件时的线程安全问题?

最佳答案

首先,您不应该直接从工作线程调用 UI。有很多充分的理由。

但如果您确实需要它,那么使用原始 HWND 会更安全。否则你应该检查 pStaticText->SendMessage 方法是否线程安全。

如果您使用的是 VS2010 及更高版本,我建议您使用这种方法: http://www.terrainformatica.com/2011/01/c0x-running-code-in-gui-thread-from-worker-threads/

关于c++ - 将 MFC 控件传递给线程还是传递句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14551224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com