accept后,addtoclientlist,然后与iocp绑定,
再调用wsarecv后立即返回,继续accept.那么workthread中调用GetQueuedCompletionStatus是怎么判断他已经完成wsarecv并返回结果的?

解决方案 »

  1.   

    操作系统只有帮忙收完WSArecv的时候才会在GetQueuedCompletionStatus通知到用户的。
      

  2.   

    我就是想问一下,他是通过什么机制判断到wsarecv已经完成?
      

  3.   

    这是windows内部的事情,如何收发是操作系统的事情,收好通知用户一下即可。
    具体的细节 你得问MS的人了。
      

  4.   

    TO akirya :
    我看了一下Sonic.net模拟的IOCP类,他是这样实现的.
    把object 放入一个队列,然后出列,调用wsarecv等函数进行操作,完成后再放回队列.这个过程好像 和win32 的iocp实现过程类似accept->得到socket->和iocp绑定(放入队列)->调用wsarecv,(从队列中取出socket,接着收到数据后放回队列)
    工作线程getqueuecomplestatus得到recv的结果(从队列中得到成功recv后的socket)不知我有没有理解错?
      

  5.   

    TO akirya :
    我看了一下Sonic.net模拟的IOCP类,他是这样实现的.
    把object 放入一个队列,然后出列,调用wsarecv等函数进行操作,完成后再放回队列.这个过程好像 和win32 的iocp实现过程类似accept->得到socket->和iocp绑定(放入队列)->调用wsarecv,(从队列中取出socket,接着收到数据后放回队列)
    工作线程getqueuecomplestatus得到recv的结果(从队列中得到成功recv后的socket)不知我有没有理解错?
      

  6.   

    差不多是那个过程,不过再怎么模拟也没系统自带的iocp效率高。