读取串口时延迟ReadFile

时间:2014-11-18 10:52:20

标签: c++ winapi serial-port

我试图理解,为什么我的阅读功能需要这么多"额外"时间(约60ms)?它必须花费大约50毫秒,但我花在阅读功能130-140毫秒。在图片(绿色 - 发送,黄色 - 接收)时,我在read(3)被呼叫以及何时完成时进行了标记。一切都按预期工作,但有一个奇怪的延迟。由于端口波特率仅为600 bit / s且通信是同步的,我不能盲目等待60ms,这是非常浪费的。超时,缓冲区大小等实验没有任何结果。是否有可能摆脱读取功能的延迟?

std::vector<byte> read(const size_t expected)
{
    std::vector<byte> buffer(expected, 0);
    DWORD totalReaded = 0, bytesReaded, dwEventMask;
    if (!SetCommMask(hPort, EV_RXCHAR))
        throw std::runtime_error("SetCommMask failed.");

    if (!WaitCommEvent(hPort, &dwEventMask, NULL))
        throw std::runtime_error("WaitCommEvent failed.");

    do
    {
        if (ReadFile(hPort, &buffer[totalReaded], buffer.size() - totalReaded, &bytesReaded, nullptr))
        {
            totalReaded += bytesReaded;
        }
        else
        {
            throw std::exception("ReadFile failed!");
        }
    } while (totalReaded < buffer.size());
    buffer.resize(totalReaded);
    return buffer;
}

完整的程序代码:http://pastebin.com/iu1j8V0g

0 个答案:

没有答案