我需要在使用某些对话框的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)
答案 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交互留给主线程并将消息从辅助线程发布到主线程更好。