2011-08-18 44 views
1

我正在写一个与USB设备通信的Windows实用程序。该驱动程序是由Analog Devices(设备中使用的控制器芯片的制造商)提供的定制驱动程序。与USB设备通话时,WriteFile有时会挂起

我已经调整了他们的示例Windows应用之一与设备进行通信。通信是通过命名管道完成的,可以是同步或异步的。我在测试中发现的问题是,如果在写入期间关闭设备(设备具有硬电源开关),则对WriteFile api函数的调用有时可能无法返回。使用异步或同步调用观察同样的事情 - 使用aysnc时看不到超时发生。

发生这种情况后,我需要重新启动我的应用程序,因为处理USB通信的线程已挂起。

有没有办法阻止WriteFile在这种情况下无法返回?

谢谢 汤姆戴维斯。

+0

你应该问在设备问题供应商的支持论坛 –

+0

当然,但我经常发现我在这里得到更快的反应! –

回答

0

您可以cancel IO operations使用CancelSynchronousIoCancelIoEx。如果您在编写期间检测到您的comm线程意外阻塞,则可以这样做。

可能的交易破坏者:

  • 仅适用于Windows Vista和较新的
  • 驱动程序必须支持取消