VC6.0线程编译问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:20:53
请问我下面的代码为什么会出现
error C2352: 'TESTDlg::DisplayOneInfo' : illegal call of non-static member function
的错误?怎么解决啊,急死我了。

UINT TESTDlg::thread_proc(LPVOID pParam)
{
DisplayOneInfo();
return 0;
}

void TESTDlg::OnGetdata()
{
AfxBeginThread(thread_proc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}

void TESTDlg::DisplayOneInfo()
{
m_ctlListT.DeleteAllItems( );
//others
}

class TESTDlgDlg : public CDialog
{
public:
CListCtrl m_ctlListT;
void OnGetdata();
static UINT thread_proc(LPVOID pParam);
void DisplayOneInfo();
}

类的普通成员函数不能作为线程的入口点函数,也就是说你的thread_proc是类TestDlgDlg的成员函数(member function),无法作为一个线程来运行。
只有普通函数或者 类的静态(static)成员函数才能做为线程的入口点函数。如果您希望启动一个线程其中需要操作这个对象的话(就是调用某对象中的成员函数等),你需要把this指针作为thread_proc的第一个参数传入,然后在函数里使用这个指针来操作对象。

在类TESTDlg中,把DisplayOneInfo()定义为静态函数。
若DisplayOneInfo()还有其他成员函数和成员数据都要定义为静态的。

或者你用PostMessage发送一个自定义的消息,当窗口收到该消息时调用DisplayOneInfo()或者DisplayOneInfo()中的其他函数,这样就不用定义很多静态的东西了。