我现在要用完成端口实现服务器端的网络编程 , 要能够响应大规模的连接请求,
但我看到的例子都是用 控制台程序写的原代码,没有WINDOWS SDK的, 我的问题是在使用完成端口的例子中都是一个死循环, 在控制台程序中只要把他放在main()函数中即可一直处理连接请求。但是在SDK中,WinMain()函数注册窗口类,创建窗口,然后是消息循环,就到了WndProc()窗口过程中接受消息了,我把完成端口封装成函数
CompletionPort()之后怎样实现消息机制,该把它放在while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
之前还是放在WndProc()中,如果放在WndProc()中则它应该响应什么消息?谢谢各位大峡了,分不够可以在给
但我看到的例子都是用 控制台程序写的原代码,没有WINDOWS SDK的, 我的问题是在使用完成端口的例子中都是一个死循环, 在控制台程序中只要把他放在main()函数中即可一直处理连接请求。但是在SDK中,WinMain()函数注册窗口类,创建窗口,然后是消息循环,就到了WndProc()窗口过程中接受消息了,我把完成端口封装成函数
CompletionPort()之后怎样实现消息机制,该把它放在while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
之前还是放在WndProc()中,如果放在WndProc()中则它应该响应什么消息?谢谢各位大峡了,分不够可以在给
完成端口的处理就是为了把IO通讯和数据处理完全分开。当IO接收倒数据后不必等待,而是直接将数据发送到处理线程中进行处理。处理线程的数目一般是CPU*2+2比较合适,当然单CPU一般值需要一个工作线程就可以了。
至于你说的完成端口函数,我想应该放在线程处理中。
例如有初始化函数:在while (GetMessage(&msg, NULL, 0, 0)) 前初始化完成端口
其中包括:
m_hThreadArray[i] = CreateThread(NULL,0,IOCP_Routine,(LPVOID)this,0,NULL);
IOCP_Routine就是你的工作线程
将你的完成端口调用放在IOCP_Routine(LPVOID Param)函数中的while(TRUE)
{
//写你的完成端口操作
}