typedef unsigned (__stdcall *pThread)(void*);类声明
class CThread
{
public:
CThread();
void Call(pThread ThreadFunc, void* security, unsigned initflag, void* arglist, unsigned stack_size);

virtual unsigned __stdcall Oninit();
public:
HANDLE m_hThread;
unsigned* m_threadid;
};实现函数定义
void CThread::Call(pThread ThreadFunc, void* security = NULL, unsigned initflag = 0, void* arglist = NULL, unsigned stack_size = 0)
{
m_hThread = (HANDLE)_beginthreadex(security, stack_size, *ThreadFunc, arglist, initflag, m_threadid);
}当我这样调用 
CThread t;
t.Call(t.Oninit(), NULL, 0, NULL, 0);错误信息
错误 1 error C2664: “CThread::CallThread”: 不能将参数 1 从“unsigned int”转换为“pThread”请问如何修改这个错误啊小弟非常感谢

解决方案 »

  1.   

    typedef unsigned (__stdcall *pThread)(void*);class CThread
    {
    public:
    CThread();
    void Call(pThread ThreadFunc, void* security, unsigned initflag, void* arglist, unsigned stack_size); static unsigned __stdcall Oninit(void*);
    public:
    HANDLE m_hThread;
    unsigned* m_threadid;
    };
    void CThread::Call(pThread ThreadFunc, void* security = NULL, unsigned initflag = 0, void* arglist = NULL, unsigned stack_size = 0)
    {
    m_hThread = (HANDLE)_beginthreadex(security, stack_size, *ThreadFunc, arglist, initflag, m_threadid);
    }int main( )
    {
    CThread t;
    t.Call( CThread::Oninit, NULL, 0, NULL, 0);
    return 0 ;
    }
      

  2.   

    virtual unsigned __stdcall Oninit(); Oninit和pThread完全不同,怎么可能赋值,参数都不同........必须要参数和返回值都相同,而且不能是成员函数..................
      

  3.   

    可是我的Oninit 必须为虚函数
      

  4.   

    也许我曾经遇到的问题是你想要的答案,你看下吧..
    http://topic.csdn.net/u/20090113/21/8f0afb8a-c1a2-49a6-a7a0-5678e7064644.html
      

  5.   

    LZ的意思是不是要用CThread类封装线程信息,接管执行流程?
    首先得要有个线程函数,传送参数是一个CThread指针,在这之后就好办了,在线程函数里就可以用CThread接管了。
    例如:
    CThread类里,
    static unsigned __stdcall ThreadFunc(void *p)
    {
        CThread *pt = (CThread*)p;
        pt->Init.....
        pt->run.....
        pt->exit....
        return 返回值
    }
    可以些个外包函数,而将这个ThreadFunc作为private吧
      

  6.   

    类中再加一个静态函数:
    static unsigned __stdcall Oninit(void* param)
    {
      return static_cast<CThread*>(param)->Oninit();
    }