创建使用对话框的线程

时间:2011-06-09 06:51:14

标签: c++ mfc

我需要在使用某些对话框的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)

2 个答案:

答案 0 :(得分:2)

线程函数应该接收一个传递给AfxBeginThread pParam的参数,你可以将指针传递给你的类,并从线程函数调用任何类成员函数你想。我就是这样做的。

像这样(伪代码):

CWinThread* thread = AfxBeginThread(
   MyClass::ThreadFunc,
   this);

MyClass::ThreadProc(LPARAM pParam)
{
    MyClass cls = dynamic_cast<MyClass*>(pParam);
    cls->RealThreadFunc();
};

答案 1 :(得分:1)

&#34;触摸&#34;通常不是一个好主意。来自辅助线程的UI。将所有UI交互留给主线程并将消息从辅助线程发布到主线程更好。