class mysocket
{private:
SOCKET mysock;
HANDLE hThread;public:

mysocket(SOCKET mysock)
{
this->mysock = mysock;
}

DWORD WINAPI ThreadProc(LPVOID lpParam)
{
int nbytes = 0;

char buf[100]; 

while(true)
{ //等待接受参数
nbytes = recv(this->mysock,buf,100,0); buf[nbytes] = '\0'; 
printf("接受消息:%s\n",buf);
}

return 0;
} //启动线程
void run_Thread()
{
DWORD dwThreadid1; this->hThread = CreateThread(NULL,NULL,this->ThreadProc,NULL,0,&dwThreadid1);
WaitForSingleObject(this->hThread,100);
}
//关闭socket,线程
void close()
{
closesocket(this->mysock); 

CloseHandle(this->hThread);
}

};
this->hThread = CreateThread(NULL,NULL,this->ThreadProc,NULL,0,&dwThreadid1)问题就出在这里下面是错误提示
cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)
是不是要用函数指针?我不会解决请帮我改一下谢谢

解决方案 »

  1.   

    staticDWORD WINAPI ThreadProc(LPVOID lpParam) 
      

  2.   

    你的线程函数写得不对,应该按如下形式写:
    void mysocket::MyThread()
    {
        int nbytes = 0;     char buf[100];     while(m_bRun) //这里将你的true最好是改成用一个变量控制,这样停止线程时只要将m_bRun设置为false这样线程会自己终止,一般不赞成直接杀线程。
        { //等待接受参数 
            nbytes = recv(this->mysock,buf,100,0);        buf[nbytes] = '\0'; 
           printf("接受消息:%s\n",buf); 
           sleep(50);//最好是sleep一下,要不你的CPU占用率太高了
        } 
    }
    DWORD WINAPI ThreadProc(LPVOID pPara)
    {
        mysocket* pSck = (mysocket*)pPara;
        pPara->MyThread();
        return NULL;
    }