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

Emu*_*tor 3 mfc serial-port timer visual-c++

我有我的代码,读取和写入MFC编写的串行端口.这些程序运行良好,但由于发生了许多操作(读写),因此速度有点慢.我有一个定时器,可以在串口上进行操作.计时器如下:

Loop_Timer = SetTimer(1,50,0);
Run Code Online (Sandbox Code Playgroud)

串口传输信息如下:

BaudRate = 57600;
ByteSize = 8;
Parity = NOPARITY;
StopBits = ONESTOPBIT;
fAbortOnError = false;
Run Code Online (Sandbox Code Playgroud)

定时器启动时会发生以下写入和读取操作:

Write(command);
Read(returned_message);
returned_message.Trim();
...   
//finds a value from the returned string
...
Run Code Online (Sandbox Code Playgroud)

因此,对于给定的选定选项,此读取和写入操作可能是1,2,3或4次.

对于Ex:选项1要求在给定的计时器中发生上述功能4次.选项2要求上述功能发生2次.(因为它只有两个带有返回值的变量).等......

现在,我试图做的是提高整体操作的速度,使其稳健并快速响应.我试过改变计时器,但它仍然很慢.有关改进的建议吗?

Chr*_*sBD 5

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

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

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

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

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