Winsock 作为一个线程中的 接收问题,总是出错(sockcore.cpp 336 lines),请帮忙
我把我的CSocket的接收数据作为一个独立的线程来接收数据,以下是我的线程函数,我用过:AfxBeginThread(ReceiveThread,this);及 CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveThread,(LPVOID)NULL,0,&threadid)两个函数,可仍出现错误,该怎么办呢? 以下是我的线程函数:
DWORD(调用AfxBeginThread返回类型用的是UINT) ReceiveThread(LPVOID param)
{
BOOL Done=FALSE;
int nRead;
int i=0,j=0;
CSocket sockServer;
CSocket sockReceive;
memset(data,0,sizeof(data));
memset(drawdata,0,sizeof(drawdata));
Sleep(100);
if(!sockServer.Create(8080))return 0;
if(!sockServer.Listen(1))return 0;
if(!sockServer.Accept(sockReceive))return 0;;
while(!Done)
{
nRead=sockReceive.Receive(data,sizeof(data));
if(nRead==SOCKET_ERROR||nRead==0)Done=TRUE;
while(data[j].id!=0)
{
drawdata[i].fx=data[j].fx;//drawdata[i].f
drawdata[i].fy=data[j].fy;//drawdata[i].f
i++;j++;
}
j=0;
memset(data,0,sizeof(data));
continue;
}
sockServer.Close();
sockReceive.Close();
return 1;
}
经过我调试,发现 if(!sockServer.Create(8080))return 0;出现一下错误:Unhandled exception in my.exe:0xC0000005:Access Violation,请各位高手帮忙,我不甚感激!
注:如果不把接收数据这部分放在一个线程中(采用的是阻塞模式),不出现错误,可是应用程序就会被挂起,不能作其他的工作。