visual-c++ - 使用定时器提高读/写串行端口的速度

标签 visual-c++ mfc timer serial-port

我的代码可以读取和写入用 MFC 编写的串行端口。这些程序运行良好但有点慢,因为有许多操作正在发生(读取和写入)。我有一个定时器,可以对串口进行操作。定时器如下:

Loop_Timer = SetTimer(1,50,0);

串口传输信息如下:

BaudRate = 57600;
ByteSize = 8;
Parity = NOPARITY;
StopBits = ONESTOPBIT;
fAbortOnError = false;

定时器启动时会发生如下读写操作:

Write(command);
Read(returned_message);
returned_message.Trim();
...   
//finds a value from the returned string
...

因此,对于给定的选定选项,此读写操作可能发生 1、2、3 或 4 次。

例如:选项 1 要求上述函数在给定计时器中出现 4 次。 选项 2 要求上述功能出现 2 次。 (因为它只有两个具有返回值的变量)。 ETC ...

现在,我试图做的是提高整体操作的速度,使其健壮并快速响应。我尝试更改计时器,但它仍然很慢。有什么改进建议吗?

最佳答案

您最好在单独的线程中运行实际的串行端口处理,并使用 WaitCommEvent 而不是计时器来接受传入数据。将新接收到的数据附加到该线程的本地存储缓冲区中。

如果您愿意,可以使用定时器从您的串口线程中检索数据,或者让您的串口线程与您的主应用程序通信。当收到完整的消息时。

当向串行端口线程发送数据时,您需要一种机制,即数据在本地存储到串行端口代码并从那里传输。

要记住的是,与所有其他通信方式相比,串行端口传输和接收速度很慢,通过访问主应用程序线程上的串行端口,您会大大降低速度,尤其是在传输数据时。

如果您发现使用 Win32 API 和串口直接编码很痛苦,那么 this class here我发现非常有用。

关于visual-c++ - 使用定时器提高读/写串行端口的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952830/

相关文章:

objective-c - 使用计时器播放音频样本

java - 如何在运行时更改我的 TimerTask 的执行周期?我

C++生成一个4位随机数

c++ - 如何使用正则表达式提取字符串的不匹配部分

windows - 可能使用提升的权限创建的日志文件

c++ - 如何定义与使用 lambda 兼容的函数指针并将捕获作为回调

c++ - MFC - 手动扩展stringtable

无法使用 Visual C++ 编译器包含某些头文件

c++ - 转换为 LPCTSTR 时出现文件复制问题

javascript - 游戏计时器(开始、暂停、停止)