c++ - ReadFile Timeout 字节间延迟时间

标签 c++ c windows serial-port

我希望串行通信设备的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/

相关文章:

c++ - 在 C 或 C++ 中取消引用数组时使用小数参数

c++ - 为什么 char* p = "..."是对的,而 int* p = {1,2} 是错的?

c++ - 无法写入可执行文件当前目录中的文件夹

c++ - Allegro Draw Sprite() 无法正常运行 C++

c - 如何理解汇编级别的原子 test_and_set?

windows - 如何 "echo"批处理文件中的变量?

c++ - O(NlogN) 算法运行速度比 O(n) 快...等等,什么?

c++ - 运行时检查失败 #2,同时使用 API 保存图像帧

c++ - Windows C++ API ListView 未显示

ruby-on-rails - ImageMagick - "CORE_RL_magick_.dll not found"或如何使用 ruby​​ 1.9.2 在 Windows 上安装 RMagick