本帖最后由 VisualEleven 于 2011-11-14 14:33:58 编辑

解决方案 »

  1.   

    据MSDN说BindIoCompletionCallback 关联一个线程池中的IO完成端口,但是线程池还是得自己维护的。
      

  2.   

    一直用boost::asio,微软的没用过
      

  3.   

    声明:没有用过IOCP,只是了解过。以下言论仅供参考
    实际两个并没有太多去吧,一个是啥事都得自己干,另外一个是很多事操作系统帮你干,然后让你来用。WINDOW内部实现了线程池的,也就是操作系统负责维护这个线程池。然后提供一些接口(函数),让你又几乎传入执行函数等。这个线程池可以先显示:
    1.异步的调用一个函数
    2.隔一段时间执行一个函数
    3内核对象触发时执行一个函数
    4.异步IO请求完成是来执行一个函数。
    4项符合你现在这种情况的。
    总结:内部原理和IOCP是一样的。
      

  4.   

    boost::asio这个很好,可惜没用过
      

  5.   

    Vista、Win7、Win2008系统用BindIoCompletionCallback
    Win2003、XP、Win2000还是用CreateIoCompletionPort吧
    从Vista开始,系统内部的线程池性能有很大提升。BindIoCompletionCallback简单稳定,但回调函数在IO完成后才触发,较难控制(扩展难),
    CreateIoCompletionPort编程较复杂,但线程池自由调配,可以配合PostQueuedCompletionStatus实现一些自定义功能。
      

  6.   


    这个回答还算满意,顺便问下,我想对socket重用,可是经常在DisconnectEx时出现10057的错误,出现的概率在%20左右,在AcceptEx时出现10022的错误概率大约%30-40,是什么原因呢
      

  7.   

    Vista、Win7、Win2008系统用BindIoCompletionCallback
    Win2003、XP、Win2000还是用CreateIoCompletionPort吧
    从Vista开始,系统内部的线程池性能有很大提升。