我正在研究一个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()
将退出。