阅读:855回复:0
应用层超时条件发生,调用CancelIo,然而板卡还在进行数据传输。
应用层需要的数据量比较大,所以,有可能在没有达到需要的数据
量之前,应用层调用CancelIo中止异步IO,我有一些考虑: 1、能否通过调用Cancel例程结束数据传输,并将Cancel例程中的 Irp->IoStatus.Status设为STATUS_CANCELLED,而将Irp->IoStatus.Information 设为已经传输的数据量,然后调用IoCompleteRequest( Irp,IO_NO_INCREMENT); 返回后,从应用层调用GetOverlappedResult来获取Information字段? 2、如果发生Cancel时,有一个内核线程正在运行,将数据从系统空间 复制到用户空间,只有等数据传输完毕后,才可以得到已传输的数据量 的值,在Cancel例程中如何处理这个线程呢? |
|
|