使用定时器增加读/写串口的速度



我有我的代码,读取和写入在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次。(因为它只有两个带返回值的变量)。等…

现在,我试图做的是提高整个操作的速度,使其健壮,反应迅速。我试着改变定时器,但它仍然很慢。有什么改进的建议吗?

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

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

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

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

如果你发现使用Win32 API和串行端口直接编码很痛苦,那么这个类在这里我发现非常有用。

最新更新