我希望ReadFile()
与串行通信设备在收到至少一个字节或超时时返回。
我已经查找了ReadFile()
的超时时间。
大多数人提及SetCommTimeouts()
和overlapped I/O
但是SetCommTimeouts()
没有返回,但是接收到一个字节,直到超时为止。
overlapped I/O(GetOverlappedResult)
也不符合我的要求。正确?
然而我知道GetOverlappedResultEx()
似乎支持这一点,使用DWORD dwMilliseconds
参数,我不想使用EX
系列函数。
有什么办法吗?
答案 0 :(得分:0)
您必须通过指定FILE_FLAG_OVERLAPPED
。
当达到超时时,您可以使用文件句柄调用CancelIo
。
HANDLE hThread = CreateThread(NULL, 0, TizReadFile, tizHandle, 0, 0);
WaitForSingleObject(hThread, 2);
CancelIo(tizHandle);
...
DWORD WINAPI TizReadFile(HANDLE &tizHandle)
{
DWORD dwRead = 0;
if(0 == ReadFile(tizHandle, g_globalBuffer, dwWant2Read, &dwRead, 0))
return GetLastError();
return 1;
}