本文整理汇总了C++中ServerSocket::postEvent方法的典型用法代码示例。如果您正苦于以下问题:C++ ServerSocket::postEvent方法的具体用法?C++ ServerSocket::postEvent怎么用?C++ ServerSocket::postEvent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ServerSocket
的用法示例。
在下文中一共展示了ServerSocket::postEvent方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addClientMonitorThread
//thread for monitor the client number
unsigned int ServerSocket::addClientMonitorThread(LPVOID lpParam)
{
ServerSocket* pServer = (ServerSocket*)lpParam;
HANDLE hList[2];
hList[0] = pServer->m_addClientEvent;
hList[1] = pServer->m_monitorEndEvent;
DWORD dwRet;
while(1)
{
dwRet = WaitForMultipleObjects(2, hList, FALSE, 5000);
if(dwRet == WAIT_OBJECT_0)
{
pServer->postEvent(OP_ADDCLIENT);
}
else if(dwRet == WAIT_OBJECT_0+1)
{
return 0;
}
else if(dwRet == WAIT_TIMEOUT)
{
pServer->postEvent(OP_MAINTENANCE);
}
}
while(1)
{
ClientConnect clientConnect;
int clientAddrLen = sizeof(clientConnect.clientSockAddr);
clientConnect.m_socket = accept(pServer->m_socket, (sockaddr*)&clientConnect.clientSockAddr, &clientAddrLen);
if(clientConnect.m_socket < 0)
printf("accept() failed\n");
else
{
printf("Client(IP:%s) connected\n", inet_ntoa(clientConnect.clientSockAddr.sin_addr));
//把客户端连接保存起来
int idx = g_clientConnectManager->addClient(clientConnect);
ClientConnect* pClientConnect = g_clientConnectManager->getClient(idx);
CreateIoCompletionPort((HANDLE)(pClientConnect ->m_socket), pServer->m_completionPort, (ULONG_PTR)pClientConnect, 0);
// 开始在接受套接字上处理I/O使用重叠I/O机制
// 在新建的套接字上投递一个或多个异步
// WSARecv或WSASend请求,这些I/O请求完成后,工作者线程会为I/O请求提供服务
// 单I/O操作数据(I/O重叠)
OVERLAPPED_PLUS* ov = new OVERLAPPED_PLUS;
ZeroMemory(&(ov->overlapped), sizeof(OVERLAPPED));
ov->WsaBuf.len = MAX_TCPBUFFER_SIZE;
ov->WsaBuf.buf = ov->buffer;
DWORD RecvBytes;
DWORD Flags = 0;
WSARecv(pClientConnect->m_socket, &(ov->WsaBuf), 1, &RecvBytes, &Flags, &(ov->overlapped), NULL);
}
}
return 0;
}