18,356
社区成员
发帖
与我相关
我的任务
分享
//处理I/O的线程
DWORD WINAPI ServerThread(LPVOID lpParam)
{
pTHREAD_OBJ pThread=(pTHREAD_OBJ)lpParam;
printf("新线程%d起动\n",GetCurrentThreadId());
while(true)
{
//等待网络事件
int nIndex=WSAWaitForMultipleEvents(pThread->nSocketCount+1,pThread->hEvents,false,WSA_INFINITE,false);
nIndex=nIndex-WSA_WAIT_EVENT_0;
//查看受信事件
for(int i=nIndex;i<pThread->nSocketCount+1;i++)
{
nIndex=WSAWaitForMultipleEvents(1,&pThread->hEvents[i],true,0,false);
if(WSA_WAIT_FAILED==nIndex||WSA_WAIT_TIMEOUT==nIndex)
{
continue;
}
else
{
if(0==i)
{
RebuildArray(pThread); // 重建句柄数组
if(pThread->nSocketCount==0)
{
FreeThreadObj(pThread);
printf("线程%d退出\n",GetCurrentThreadId());
return 0;
}
::WSAResetEvent(pThread->hEvents[0]);
}
else
{
pSOCKET_OBJ pSocket=FindSocketObj(pThread,i);
if(pSocket!=NULL)
{
if(!HandleIO(pThread,pSocket))
{
RebuildArray(pThread); // 重建句柄数组
}
}
else
{
printf("unable to find socket object\n");
}
}
}
}
}
}
//处理I/O的线程
DWORD WINAPI ServerThread(LPVOID lpParam)
{
pTHREAD_OBJ pThread=(pTHREAD_OBJ)lpParam;
printf("新线程%d起动\n",GetCurrentThreadId());
while(true)
{
//等待网络事件
int nIndex=WSAWaitForMultipleEvents(pThread->nSocketCount+1,pThread->hEvents,false,WSA_INFINITE,false);
nIndex=nIndex-WSA_WAIT_EVENT_0;
if(WSA_WAIT_FAILED==nIndex||WSA_WAIT_TIMEOUT==nIndex)
{ // 失败或者超时
continue;
}
else
{ // 成功受信
if(0==nIndex) // pThread->hEvents[0]受信
{
RebuildArray(pThread); // 重建句柄数组
if(pThread->nSocketCount==0)
{
FreeThreadObj(pThread);
printf("线程%d退出\n",GetCurrentThreadId());
return 0;
}
::WSAResetEvent(pThread->hEvents[0]);
}
else
{
pSOCKET_OBJ pSocket=FindSocketObj(pThread,nIndex);
if(pSocket!=NULL)
{
if(!HandleIO(pThread,pSocket))
{
RebuildArray(pThread); // 重建句柄数组
}
}
else
{
printf("unable to find socket object\n");
}
}
}
}
//查看受信事件
// for(int i=nIndex;i<pThread->nSocketCount+1;i++)
// {
// nIndex=WSAWaitForMultipleEvents(1,&pThread->hEvents[i],true,0,false);
// if(WSA_WAIT_FAILED==nIndex||WSA_WAIT_TIMEOUT==nIndex)
// {
// continue;
// }
// else
// {
// if(0==i)
// {
// RebuildArray(pThread); // 重建句柄数组
// if(pThread->nSocketCount==0)
// {
// FreeThreadObj(pThread);
// printf("线程%d退出\n",GetCurrentThreadId());
// return 0;
// }
// ::WSAResetEvent(pThread->hEvents[0]);
// }
// else
// {
// pSOCKET_OBJ pSocket=FindSocketObj(pThread,i);
// if(pSocket!=NULL)
// {
// if(!HandleIO(pThread,pSocket))
// {
// RebuildArray(pThread); // 重建句柄数组
// }
// }
// else
// {
// printf("unable to find socket object\n");
// }
// }
// }
// }
//}
}