ReadFile Timeout用于字节间延迟时间

时间:2014-11-18 16:16:53

标签: c++ c windows serial-port

我希望ReadFile()与串行通信设备在收到至少一个字节或超时时返回。

我已经查找了ReadFile()的超时时间。

大多数人提及SetCommTimeouts()overlapped I/O

但是SetCommTimeouts()没有返回,但是接收到一个字节,直到超时为止。

overlapped I/O(GetOverlappedResult)也不符合我的要求。正确?

然而我知道GetOverlappedResultEx()似乎支持这一点,使用DWORD dwMilliseconds参数,我不想使用EX系列函数。

有什么办法吗?

1 个答案:

答案 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;
}