视窗串行通信C++
windows serial communication C++
我是c++和windows串行通信的新手。现在我正在关注微软链接,但是我不知道以下变量的含义这些变量有什么作用。请帮助我了解以下变量。我不知道的变量
- 伊普布夫
- 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。我自己没有用过,因此不能保证。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 删除功能不适用于串行通信后多个循环中的多个实例
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 使用 pybind11 共享 MPI 通信器
- 进程间通信堆内存
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- C++ 两台不同机器之间通过wifi进行套接字通信
- 提升::Asio 异步聊天客户端停止与服务器通信
- 与SPI NAND闪存(STM32L4,QSPI)的通信问题
- 线程之间的通信不起作用 - C++
- 如何在此功能中没有通信过程?
- MPI 集合通信中的指针分配