在MFC下类的线程函数必须是静态函数,也就是说不属于某个对象,而是属于类方法,当对象结束时线程并不结束。
而静态函数必须使用静态成员变量,因此不能使用普通的成员变量。
解决以上问题的办法就是——给线程方法传递 this 指针作为参数,通过 this 指针访问成员变量或者普通成员方法。
线程的创建和启动:
AfxBeginThread((AFX_THREADPROC)ThreadFunction, this);
该函数返回CWinThread对象指针,第一个参数是线程函数指针,第二个参数就是传递给线程函数的参数。还有其它的参数请查看MSDN。
线程函数(具有固定格式,且类的线程方法为静态方法):
UINT CXX::ThreadFunction(LPVOID pParam)
{
CXX* pThreadParam = (CXX *)pParam;
pThreadParam->m_variable; //假设CXX有一类普通成员变量m_variable
/*其他代码*/
return 0;
}