比方说
类生命
Class CNetStat
{
UINT NbtstatThread(LPVOID param);
bool NetConnect();
}
定义:
bool CNetStat::NetConnect()
{
.....
::AfxBeginThread(NbtstatThread,m_hWnd,THREAD_PRIORITY_NORMAL);
.....
}UINT CNetStat::NbtstatThread(LPVOID param)
{
.....
}这样可以吗?如果可以的话,我就是这样做的,为什么会编译错误
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
这算是什么问题呢???
急啊,救命啦

解决方案 »

  1.   

    m_Thread = AfxBeginThread(Thread, this)
      

  2.   

    我这个Thread是在类里面定义的,可以吗?
      

  3.   

    搞错啦,实现线程的函数是不用在前面加上类名的!!!将:UINT CNetStat::NbtstatThread(LPVOID param)
    {
    .....
    }改为:UINT NbtstatThread(LPVOID param)
    {
    .....
    }
      

  4.   

    线程函数要声明staticClass CNetStat
    {
    static UINT NbtstatThread(LPVOID param);
    bool NetConnect();
    }
    定义:
    bool CNetStat::NetConnect()
    {
    .....
    ::AfxBeginThread(NbtstatThread,m_hWnd,THREAD_PRIORITY_NORMAL);
    .....
    }UINT CNetStat::NbtstatThread(LPVOID param)
    {
    .....
    }
      

  5.   

    但我在线程中要用到类里面的成员变量和函数
    难道声明一个全局的CNetStat对象??不会吧????
    这样不是。
    一定要这样写吗??
      

  6.   

    类的成员函数在编译时有一个默认的隐藏参数指向this指针,而线程的传递
    class CA
    {
        int function(int n);
    }
    所以以上function编译后的实际原形是:
    int function(CA*, int)
    要去掉隐藏参数,可以在成员函数声明时加上static,成为静态成员.
    但静态成员不能随意访问类的其他非静态成员.
    所以必须将this指针显式地传给函数.
    如一种典型的做法:
    class CA
    {
        void StartThread();
        static UINT ThreadProc(LPVOID pParam);
    };
    UINT CA::ThreadProc(LPVOID pParam)
    {
        CA *pThis = (CA*)pParam;
        ....
    }
    void CA::StartThread()
    {
        ::AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL);
    }