【发布时间】:2011-12-18 19:18:43
【问题描述】:
我使用的设备驱动程序偶尔会错过来自硬件的中断。
要从设备读取数据,我使用函数
BOOL WINAPI ReadFile(
__in HANDLE hFile,
__out LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out_opt LPDWORD lpNumberOfBytesRead,
__inout_opt LPOVERLAPPED lpOverlapped
);
当设备驱动程序错过中断时,此函数将永远阻塞。这会导致程序停顿,必须重新启动 Windows 才能解决。
为了解决这个问题,我想在调用 Readfile() 时使用超时限制。但是当我使用
BOOL WINAPI SetCommTimeouts(
__in HANDLE hFile,
__in LPCOMMTIMEOUTS lpCommTimeouts
);
失败,错误代码 87(无效参数)。显然,我不能在设备驱动程序句柄上使用这个超时的东西。我怎样才能解决这个问题?是否有其他方法可以在设备驱动程序上设置超时限制?
谢谢
【问题讨论】:
-
可能this库对你有用。
-
SetCommTimeouts 用于串行 I/O,而不是通用设备驱动程序 I/O。
标签: c++ windows timeout device-driver readfile