将线程函数声明为静态函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 18:46:05
将成员函数声明为静态虽然可以解决作为线程函数的问题,但是它带来了新的问题,那就是static成员函数只能访问static成员。解决此问题的一种途径是可以在调用类静态成员函数(线程函数)时将this指针作为参数传入,并在该线程函数中用强制类型转换将this转换成指向该类的指针,通过该指针访问非静态成员。

能不能举个例子?

class CWorkThread
{
public:
    BOOL Create();
    UINT Work();
    static UINT ThreadProc(LPVOID lpVoid);
};

BOOL CWorkThread::Create()
{
    AfxBeginThread(ThreadProc, this);
    return TRUE;
}

UINT CWorkThread::ThreadProc(LPVOID lpVoid)
{
    CWorkThread *pThis = (CWorkThread *)lpVoid;
    return pThis->Work();
}

UINT CWorkThread::Work()
{
    return 0;
}

LS的回答不错,受益啊