阅读:1641回复:1
怎么取消同步通讯的IO?
情况是这样的,一个应用程程序,新建了一个死循环线程,采用DeviceIoControl和驱动通讯,
驱动每次返回STATUS_PENDING,有事件的时候就触发通讯. 应用程序里的线程: while (stop==false) { DeviceIoControl( hDevice,IOCTL_Sth,null,0,@GetBack,1600,dwOutput,null); //每次返回PENDING,就在这里等待. do.... } 现在我想结束这个程序.但是线程是处于等待驱动PENDING的情况,就算我给stop赋值TRUE: while (stop==false) { DeviceIoControl( hDevice,IOCTL_Sth,null,0,@GetBack,1600,dwOutput,null); //线程依然在此等待 do.... } stop=true; 或者我用CancelIO,线程也没办法执行到. while (stop==false) { DeviceIoControl( hDevice,IOCTL_Sth,null,0,@GetBack,1600,dwOutput,null); //线程依然在此等待 do.... } cancelIO(xx); CancelIO又必须在同一线程里才可以执行.怎么办呢?? |
|
沙发#
发布于:2010-02-16 11:12
你这个异步的io.
直接在驱动中cancel掉irp |
|
|