解决方案 »

  1.   

    MSDN原话:The calling process must set this member either to zero or a valid event handle before it calls any overlapped functions. 调用线程必须设置hEvent为NULL或者一个合法的Event句柄
    如果你需要通过hEvent来判断IO是否完成,就可以创建这个对象
    一般用于多个IO操作并发情况下,通过WaitForMultipleObjects可以等待多个IO操作
      

  2.   


    不对吧在重叠io中也未必要创建吧iocp中倒是可以不创建。比如重叠io中使用完全例程
      

  3.   

    看你需不需要完成通知  不需要就不创建 需要就创建呗 完成了会setevent...
      

  4.   


    这个创建 是需要需要 手工reset 恢复的, overlapped完成后,确实自动wsasetevenet了。如果是createevent 创建的,则是自动帮你 setevent了 
      

  5.   


    在重叠io中也未必要创建吧iocp中倒是可以不创建。比如重叠io中使用完全例程
    看清楚没?
    我说的就是未必要创建Event啊,你需要就创建,不需要就赋NULL
      

  6.   


    在重叠io中也未必要创建吧iocp中倒是可以不创建。比如重叠io中使用完全例程
    看清楚没?
    我说的就是未必要创建Event啊,你需要就创建,不需要就赋NULL
    “如果你需要通过hEvent来判断IO是否完成,就可以创建这个对象”
    请问这句话怎么理解?
    不管是异步IO还是IOCP等,都是非阻塞,应该是都使用了hEvent吧?
      

  7.   


    在重叠io中也未必要创建吧iocp中倒是可以不创建。比如重叠io中使用完全例程
    看清楚没?
    我说的就是未必要创建Event啊,你需要就创建,不需要就赋NULL
    “如果你需要通过hEvent来判断IO是否完成,就可以创建这个对象”
    请问这句话怎么理解?
    不管是异步IO还是IOCP等,都是非阻塞,应该是都使用了hEvent吧?重叠io可以使用 event,也可以不使用。大多重叠io都使用。对于iocp 可以使用,也可以不使用。并没有规定,必须使用,使用的理由: 是否完成通知。一家之言。
      

  8.   

    文件对象本身也能当一个event用.
    如果不创建event,等待此OVERLAPPED的函数就会等待文件对象.
    一个线程这么做没问题,但多个线程这么做就分不清了.
    个人经验,写串口可不用event,读串口最好用上.否则会出现很多0长度的假消息.