我定义了一个类的成员函数,DWORD WINAPI ChatServer::WorkerThread(LPVOID lpParam);
可是编译的时候总是会报错说第三个参数类型不对。但是如果是这个形式的函数的话DWORD WINAPI WorkerThread(LPVOID lpParam);又没有问题,请教大家改如何解决?

解决方案 »

  1.   

    线程函数一般为回调函数,DWORD WINAPI WorkerThread(LPVOID lpParam);调用线程时,将
    ChatServer指针递给LPVOID lpParam
      

  2.   

    DWORD WINAPI ChatServer::WorkerThread(LPVOID lpParameter)
    {
     ......  return 0;
    }
    以上为定义的函数;我是这么调用的。
    CreateThread(NULL, 0, WorkerThread, NULL, 0, &dwThreadId); Compiling...
    ChatServer.cpp
    G:\聊天室资料\ChatRoomServer\ChatServer.cpp(33) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
            None of the functions with this name in scope match the target type
    Error executing cl.exe.ChatRoomServer.exe - 1 error(s), 0 warning(s)
    这是编译时的错误;
    大哥大姐们一定帮帮忙啊,说的详细些。
      

  3.   

    建议你定义一个线程类,或者用AfxBeginThread。
    AfxBeginThread(WaitThread,this,THREAD_PRIORITY_HIGHEST,0,0,NULL);UINT WaitThread(LPVOID pParam ) //线程
    {
    ......
    return 0;
    }
      

  4.   

    怎么象是宏 WINAPI 被改掉了,换成 __stdcall 试试。
      

  5.   

    把回调函数定义成static了么?
      

  6.   

    static DWORD WINAPI  Thread(LPVOID lParam);
      

  7.   

    //ChatServer.h
    static DWORD WINAPI WorkerThread(LPVOID lpParameter);//ChatServer.cpp
    DWORD WINAPI ChatServer::WorkerThread(LPVOID lpParameter)
    {
     ......  return 0;
    }
      

  8.   

    静态函数才能做线程处理函数
    函数声明改一下就行了protected:
       static DWORD WINAPI WorkerThread(LPVOID lpParam);
      

  9.   

    在类中封装多线程一般这样做:protected:
        static DWORD WINAPI WorkerThread(LPVOID lpParam);
        DWORD ThreadFunc();实现:
    DWORD WINAPI XX::WorkerThread(LPVOID lpParam)
    {
         XX *pObj = (XX*)lpParam;
         return pObj->ThreadFunc();
    }DWORD XX::ThreadFunc()
    {
        // 线程实际动作
    }// 创建线程;
    CreateThread(NULL, 0, WorkerThread, (void*)this, 0, &id);
      

  10.   

    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkerThread,(LPVOID)this,0,&id);