本帖最后由 StarsunYzL 于 2009-09-17 15:57:57 编辑

解决方案 »

  1.   

    每次WSARecv或WSASend,都要new一个新的PER_IO_DATA
    每次GetQueuedCompletionStatus,delete取回的PER_IO_DATA
      

  2.   

    最好是弄个PER_IO_DATA池
    每次WSARecv或WSASend,从池子里拿PER_IO_DATA
    每次GetQueuedCompletionStatus,将PER_IO_DATA放回池子
     
      

  3.   

    两种情况
    1.每个提交的IO操作,都拥有各自单IO操作数据的结构,这种情况可以避免你的问题
    2.单IO操作数据被重用时,必须在上一个IO操作的完成通知接收处理之后,再提交下一个IO操作,此时可以重用单IO操作数据楼主的情况,仅仅适合第一种
      

  4.   

    原来每次WSARecv或WSASend,都要new一个新的PER_IO_DATA,看来我看的那个IOCP服务端只是个示例性的代码。能不能再随便介绍几个经典的开源IOCP代码给我学习一下。谢谢fangle6688和vieri_ch,稍后结贴。
      

  5.   

    去www.codeproject.com,搜索:A simple IOCP Server-Client Class
      

  6.   

    LZ的问题是确实会发生的,处理方法最好就是fangle6688介绍的。