我是vc的初学者,定义了一个CObject的类Ccapthread ,在这个类中包含一个线程函数
UINT Ccapthread::CapThreadProc(LPVOID param)(static类型),现在我想在单文档视图类中开启这个线程,原码如下:         Ccapthread capthread;
         MYPARAM * pParam = new MYPARAM;
CWinThread* m_pThread;
HWND hWnd=GetSafeHwnd();
AfxBeginThread(capthread.CapThreadProc(),hWnd);出错信息:'AfxBeginThread' : none of the 2 overloads can convert         
          parameter 1 from type 'unsigned int'请问各位高手应当如何解决!不胜感激

解决方案 »

  1.   

    因为AfxBeginThread函数的第一个参数为线程函数的名称,实际上应该是指针。
    所以一般线程函数不放在其他的类中。可以:
    UINT CapThreadProc(LPVOID param);
    AfxBeginThread(CapThreadProc, hWnd);或者声明指针指向类的这个函数,但是可能会出现很多问题
      

  2.   

    改成这样就行:
             Ccapthread capthread;
             MYPARAM * pParam = new MYPARAM;
    CWinThread* m_pThread;
    HWND hWnd=GetSafeHwnd();
    AfxBeginThread(Ccapthread::CapThreadProc,(LPVOID)hWnd);
      

  3.   

    关于AfxBeginThread引用类内的线程问题<c++prime>有过解释,时间长了,记不清了,你要不急的话,我给你查查.
      

  4.   

    没什么区别,只不过AfxBeginThread要求线程函数必须返回UINT,而且只有一个参数LPVOID。类的非static成员函数多了一个额外的参数this指针,所以如果直接传入类非static成员函数,编译器会发现线程函数的参数不符合要求。
      

  5.   

    感谢各位的回复,我所以将线程做成类,是想将其封装起来,并尽量避免使用全局变量,可是在从static线程函数向外传递数据显示时遇到了一些麻烦。 stonespace(stonespace) ,是否可以将你的联系方式告诉我,希望能向你多请教一些问题,.cn
      

  6.   

    没什么区别,只不过AfxBeginThread要求线程函数必须返回UINT,而且只有一个参数LPVOID。类的非static成员函数多了一个额外的参数this指针,所以如果直接传入类非static成员函数,编译器会发现线程函数的参数不符合要求。哈哈,有帮助