我现在要用完成端口实现服务器端的网络编程 , 要能够响应大规模的连接请求, 
但我看到的例子都是用 控制台程序写的原代码,没有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()中则它应该响应什么消息?谢谢各位大峡了,分不够可以在给

解决方案 »

  1.   

    由于完成端口的数据处理部分会阻塞,所以无论是在控制台方式下,还是在有界面的程序中,都应该开起一个专门线程另行处理,否则,界面会处于无响应状态,直到有完成消息到来。至于如何退出,可以在线程的循环条件上作文章,比如while(x != false)。最好发送一个PostQueueCompletionState()操作,这样就可以解除GetQueueCompletionState()的阻塞了。
      

  2.   

    我的一些想法:
    完成端口的处理就是为了把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)
    {
       //写你的完成端口操作
    }
      

  3.   

    我有例程,要的e_mail我。[email protected]