视窗串行通信C++

windows serial communication C++

本文关键字:通信 C++      更新时间:2023-10-16

我是c++和windows串行通信的新手。现在我正在关注微软链接,但是我不知道以下变量的含义这些变量有什么作用。请帮助我了解以下变量。我不知道的变量

  1. 伊普布夫
  2. dwRead

法典

DWORD dwRead;
BOOL fWaitingOnRead = FALSE;
OVERLAPPED osReader = {0};
// Create the overlapped event. Must be closed before exiting
// to avoid a handle leak.
osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (osReader.hEvent == NULL)
   // Error creating overlapped event; abort.
if (!fWaitingOnRead) {
   // Issue read operation.
   if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) {
      if (GetLastError() != ERROR_IO_PENDING)     // read not delayed?
         // Error in communications; report it.
      else
         fWaitingOnRead = TRUE;
   }
   else {    
      // read completed immediately
      HandleASuccessfulRead(lpBuf, dwRead);
    }
}

简而言之,Windows API使读取和写入串行端口类似于读取/写入任何基于磁盘的文件(CreateFile/ReadFile/WriteFile(。

CreateFile实际上用于"打开串行端口"(意味着获得独占访问权限(,因为没有什么可以真正创建的。

ReadFile和WriteFile是不言自明的。

确实会引起混淆的一个方面是操作模式 - 重叠和非重叠 I/O。这些分别与异步和同步 I/O 的含义相同。通常,读取和写入串行端口可能需要不同的持续时间才能完成,具体取决于设备实际可用的数据量或设备是否仍忙于发送要发送的先前数据等因素。 重叠 I/O 通过在任务完成时使用"事件"向调用线程发出信号,从而实现对任务的高效等待。

假设您正在编写 Win32 应用程序(GUI/控制台(,您希望使应用程序始终响应用户的输入。这意味着你想要多线程,一个线程处理 UI,另一个线程处理通信。此通信线程可以使用重叠 I/O(复杂,但在 CPU 使用率方面更有效(或非重叠 I/O(更容易(。

你可能想看看这个声称有一个更简单的界面的库http://www.naughter.com/serialport.html。我自己没有用过,因此不能保证。