windows serial communication C++

时间:2016-02-07 10:50:06

标签: c++ windows serial-communication

I'm new to c++ and windows serial communication. Now i'm following microsoft link., But there I don't know the meaning of following variables what's those variables do . Please help me to understand what the following variables. Variables i dont have idea

  1. ipBuf
  2. dwRead

code

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);
    }
}

1 个答案:

答案 0 :(得分:0)

简而言之,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。我自己没有使用它,因此无法保证它。