是否有非阻塞函数使用C返回Windows中串行端口的当前rx队列长度?

我看过的所有示例都只是调用ReadFile,它会阻塞直到指定的超时,所以我想知道是否有可能在读取之前检查缓冲区中是否有内容?

例如。我可以简单地对每个角色执行此操作:

void ReadCharacter(char *theCharacter)
{
   DWORD numBytesRead = 0;

   while (numBytesRead == 0)
   {
        ReadFile(comPorthandle,
               theCharacter,
               sizeof(char),
               &numBytesRead,
               NULL);
   }
}

但是有可能有类似的东西
int numBytesRx = GetNumBytesRx(&portHandle);
if (numBytesRx > 0)
    Read(&portHandle, targetBuffer, numBytesRead);

最佳答案

要通过ReadFile通过COM端口执行异步IO,请考虑使用函数的最后一个参数,LPOVERLAPPEDOVERLAPPED结构。 OVERLAPPED是Windows中异步IO的常见做法。

Here you can find examples

10-07 15:21