创建可用于对话框的线程

Creating threads that work with dialog boxes

本文关键字:线程 对话框 用于 创建      更新时间:2023-10-16

我需要在使用一些对话框的MFC应用程序中使用AfxBeginThread创建一个线程,但由于线程函数在类中,我必须将其设置为静态的,然后我不能使用任何控件,因为它们不是静态的,即使我将它们设置为静态,我也会遇到一些链接器错误。

有人能告诉我实现这一点的正确方法是什么吗?我真的需要解密静态控件吗?或者有其他方法可以做到这一点吗?

这是错误(无静态)

error C2228: left of '.AddString' must have class/struct/union

带静态:

unresolved external symbol "public: static class CListBox CsearchDlg::m_musicList" (?m_musicList@CsearchDlg@@2VCListBox@@A)

线程函数应该接收一个参数,该参数作为pParam传递给AfxBeginThread,您可以在那里传递指向类的指针,并从线程函数调用您想要的任何类成员函数。我就是这么做的。

类似这样的东西(伪代码):

CWinThread* thread = AfxBeginThread(
   MyClass::ThreadFunc,
   this);
MyClass::ThreadProc(LPARAM pParam)
{
    MyClass cls = dynamic_cast<MyClass*>(pParam);
    cls->RealThreadFunc();
};

从辅助线程"触摸"UI通常不是一个好主意。最好将所有UI交互留给主线程,只将消息从辅助线程发布到主线程。