当前位置: 首页>>代码示例>>C++>>正文


C++ ServerSocket::postEvent方法代码示例

本文整理汇总了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;
}
开发者ID:wuneng117,项目名称:serverTest1,代码行数:66,代码来源:ServerSocket.cpp


注:本文中的ServerSocket::postEvent方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。