justforask
驱动牛犊
驱动牛犊
  • 注册日期2009-12-26
  • 最后登录2010-02-12
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1641回复:1

怎么取消同步通讯的IO?

楼主#
更多 发布于:2010-02-10 21:56
情况是这样的,一个应用程程序,新建了一个死循环线程,采用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又必须在同一线程里才可以执行.怎么办呢??
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2010-02-16 11:12
你这个异步的io.

直接在驱动中cancel掉irp
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部