我正在研究一个C++程序,该程序可以从串行端口读取并写入串行端口。我在读取数据时遇到问题。如果没有新数据,则ReadFile()在等待直到接收到新数据。

我的代码读取数据:

while (!_kbhit())
    {
        if (!_kbhit())
        {
            if (ReadFile(hSerial, &c, 1, &dwBytesRead, NULL))
            {
                cout << c;
            }
        }
    }

如何检查是否没有新数据并跳过ReadFile()行?

编辑:

我终于能够解决它。
我将ReadFunction更改为:
do
{
    if (ReadFile(hSerial, &c, 1, &dwBytesRead, NULL))
    {
        if (isascii(c))
        {
            cout << c;
        }
    }
    if (_kbhit())
    {
        key = _getch();
    }
} while (key != 27);

我添加了这样的超时:
serialHandle = CreateFile(LcomPort, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
COMMTIMEOUTS timeouts;

    timeouts.ReadIntervalTimeout = 1;
    timeouts.ReadTotalTimeoutMultiplier = 1;
    timeouts.ReadTotalTimeoutConstant = 1;
    timeouts.WriteTotalTimeoutMultiplier = 1;
    timeouts.WriteTotalTimeoutConstant = 1;
    SetCommTimeouts(serialHandle, &timeouts);

// Call function to Read
...

最佳答案



您可以使用 SetCommTimeouts() 配置读取超时,因此,如果在超时间隔内没有数据到达,则ReadFile()将退出。

10-04 14:38