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 *)
是不是要用函数指针?我不会解决请帮我改一下谢谢
{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 *)
是不是要用函数指针?我不会解决请帮我改一下谢谢
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;
}