监听线程中使用PostQueuedCompletionStatus
工作线程中使用GetQueuedCompletionStatus
GetQueuedCompletionStatus 取得的数据会不会是多次PostQueuedCompletionStatus的结果?如果是怎么把他们拆解出来,
完成端口的缓冲区有多大?分不够另加

解决方案 »

  1.   

    会,不过在IOCP中除了主线程要各个工作线程停止时使用PostQueuedCompletionStatus以外,不大使用这个函数,当要关闭工作线程时,主线程发送与工作线程等多个停止记号,那么当一个线程受到一个停止信号后便会关闭,那么也不会再调用GetQueuedCompletionStatus,也就不会再受到停止标记。
    要把他们拆分,可以在工作线程受到PostQueuedCompletionStatus发出的标记后sleep一段时间,那么它就不会在受到同样的标记,不过你要确认在sleep的时间内,其他工作线程能够调用GetQueuedCompletionStatus,不然还是没用。
    还有一个方法比较傻,不过可供参考,就是党一个线程受到到PostQueuedCompletionStatus发出的标记后停止该线程,等到最后一个线程受到最后一个标记后,再启动与原来等多的此线程。
    完成端口的缓冲区好像更系统有关。具体不大清楚。
      

  2.   

    GetQueuedCompletionStatus 取得的数据会不会是多次PostQueuedCompletionStatus的结果?如果是怎么把他们拆解出来,
    完成端口的缓冲区有多大?分不够另加
    _____________
    你的题目我完全没有听懂.
      

  3.   

    everandforever(Forever) :
    是不是PostQueuedCompletionStatus执行一次以后GetQueuedCompletionStatus 马上来取走数据,如果是PostQueuedCompletionStatus执行了两次以上GetQueuedCompletionStatus 怎么取他的结果呢
      

  4.   

    Post一次, 线程就要GET一次;Post2次,线程就要Get两次.