UINT SocketThreadFunc(LPVOID lparam)
{
CTCPClient_CE *pTCPClient = NULL;
pTCPClient = (CTCPClient_CE *)lparam;
fd_set fdRead;
int ret;
TIMEVAL aTime;
aTime.tv_sec =1;
aTime.tv_usec =0;
int nTemp =1;
while(true)
{
if(WaitForSingleObject(pTCPClient ->m_exitThreadEvent ,0) == WAIT_OBJECT_0)
break:
FD_ZERO(&fdRead);
FD_SET(pTCPClient->m_socket,&fdRead);
ret = select(0,&fdRead,NULL,NULL,&aTime);
if(ret == SOCKET_ERROR)
{
pTCPClient->OnError(pTCPClient->m_pOwnerWnd,1);
pTCPClient->OnDisConnect(pTCPClient->m_pOwnerWnd);
closesocket(pTCPClient->m_socket);
break;
}
if(ret>0)
{
if(FD_ISSET(pTCPClient->m_socket,&fdRead))
{
AppendDeq(pTCPClient);
while(RecvDeq.size()>=8)
{
char pacLen[4] = {RecvDeq[4],RecvDeq[5],RecvDeq[6],RecvDeq[7]};
int nPacLen = *(int*)(pacLen)+8;
if(RecvDeq.size()>=nPacLen)
{
link_struct* pHead = CreatLinkFromDeq(RecvDeq);
if(pHead)
{
for(int i=0;i<nPacLen;i++)
RecvDeq.pop_front();
if(!PostMessage(pTCPClient->m_pOwnerWnd->m_hWnd,WM_READ_MESSAGE,(WPARAM)pHead,1))
ReleaseLinkMemory(pHead);
}
else
ReleaseLinkMemory(pHead);
}
else
break;
}
}
}
}
return 1;
}