重叠io中完成例程中的事件,好像没和overlapped结构相关联,可是为什么会在WaitForMultipleObjects中被触发呢

解决方案 »

  1.   

    关联是有的,回调例程的时候会把OVERLAPPED 传回来,但是这和Wait的时候触发APC没多大关系当Read 或 Wirt 的时候,IO管理器会把你传入的APC历程保存下来,然后继续向地层驱动发送IO
    请求(可能使FAST  IO,或是是用IRP包 或是其他 ),最后到设备,当设备完成请求回,会触发
    DPC,DPC在出发一个内核态APC,内核态APC再告诉IO管理请求完成,IO管理器在将你的APC回调
    例程排入Thread的用户APC队列。(大体就这样,具体细节记不清楚了)Wait...Ex 有个参数让Thread进入告警状态,当调度器发现这个Thread 有告警状态的时候他会去查看此线程
    的APC队列,如果有就回调APC例程(没记错的话,应该是一次性抽干队列)。