我希望串行通信设备的ReadFile()
在至少接收到一个字节或超时时返回。
正如我在寻找有关 ReadFile()
超时的信息。
大多数人提到SetCommTimeouts()
和重叠I/O
但是 SetCommTimeouts()
不会返回,但会收到一个字节,直到超时。
并且重叠I/O(GetOverlappedResult)
也不能满足我的要求。对吗?
但是我知道 GetOverlappedResultEx()
似乎支持这一点,使用 DWORD dwMilliseconds
参数,我不想使用 EX
系列功能。
有什么办法吗?
最佳答案
您必须通过指定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;
}
关于c++ - ReadFile Timeout 字节间延迟时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998906/