C++ ReadFile USB串行端口太慢

C++ ReadFile USB串行端口太慢,c++,visual-studio,serial-port,C++,Visual Studio,Serial Port,我需要保存来自GPS的数据。我使用Windows7系统,GPS通过USB端口连接。我使用的是基于visualstudio对话框的应用程序 GPS数据是这样的 "$GPGLL,2219.2500182,N,09019.0118688,E,055547.65,A,A*61" 我需要将这些数据保存在文件中。我已经彻底检查并相应地设置了参数 char buffer[56]; 这是我打开端口的代码 hcomm= CreateFile("COM8",

我需要保存来自GPS的数据。我使用Windows7系统,GPS通过USB端口连接。我使用的是基于visualstudio对话框的应用程序

GPS数据是这样的

"$GPGLL,2219.2500182,N,09019.0118688,E,055547.65,A,A*61"
我需要将这些数据保存在文件中。我已经彻底检查并相应地设置了参数

char buffer[56];
这是我打开端口的代码

    hcomm= CreateFile("COM8",  
                    GENERIC_READ, 
                    0, 
                    NULL, 
                    OPEN_EXISTING,
                    0,
                    NULL);
if (hcomm == INVALID_HANDLE_VALUE)
    TRACE("%s","error");
memset(&port, 0, sizeof(port));
port.DCBlength = sizeof(port);
if ( !GetCommState(hcomm, &port))
 TRACE("getting comm state");
 if (!BuildCommDCB("baud=19200", &port))
 TRACE("building comm DCB");
 if (!SetCommState(hcomm, &port))
  TRACE("adjusting port settings");
  timeouts.ReadIntervalTimeout = 0;
  timeouts.ReadTotalTimeoutMultiplier = 0;
  timeouts.ReadTotalTimeoutConstant = 0;
  if (!SetCommTimeouts(hcomm, &timeouts))
     TRACE("setting port time-outs.");
我正在读取如下数据

while(loop which executes after every 20 ms) {
 ReadFile(hcomm, buffer, sizeof(buffer), &read, NULL);
        if ( read ){
        //code to write data to file
               }
虽然我接收数据,但速度非常低。我以10赫兹的频率接收数据。我想以每秒50个读数的速度保存数据

有人能帮我吗

编辑: 根据@Paul R的建议,我将波特率提高到115200。现在,它以每秒20条消息的速度保存数据。我的GPS支持20 Hz的最大更新速率和115200的最大波特率。如果我想以每秒50条消息的速度保存数据,我需要做什么


例如,如果更新率为20 Hz,则每次读取的时间为50 ms。因此,如果每20 ms读取一次端口,它是否应该将每个条目保存两次或以适当的比例保存?

这只是基本的算法。在19200 bps时,每秒可以接收大约1920个字符(假设每个字符=8个数据位+1个起始位+1个停止位)。您上面的示例消息大约是55个字符+行终止符等,这意味着最好的情况是每秒超过30条消息。如果您必须在收到的每一条消息之间向设备发送一条消息,则该消息将更低。因此,在这种数据速率下,每秒50条消息根本不可能


简单的解决方案:将数据速率从19200 bps提高到更高的速率,例如57600 bps。

阅读的“更新速率”部分。@HansPassant,请参阅问题中的编辑部分如果GPS的更新速率为20Hz,则为每秒20次,这意味着即使你每秒能读50条信息,你也不会收到50条唯一的信息。试图阅读更多的信息只是浪费资源。哦..谢谢你指出错误。我增加了GPS和in代码的波特率。它现在每秒可以保存@20条消息。GPS的更新率最高为20 Hz。这是否导致了现在的问题?