Qt QString快速处理问题

时间:2018-07-18 16:22:17

标签: c++ performance qt serial-port qstring

我正在尝试使用QString函数来快速连续地处理通过串行接收的帧。我遇到了这样的问题:当快速连续调用时,诸如mid()之类的函数似乎停止工作。我编写了一个小型测试程序对其进行测试,但仍然存在问题。有什么方法可以使我的工作快速连续进行,还是可以尝试使用其他功能?代码如下:

for(i = 0; i < 200; i++){
  status = interfaceObject.recieveBlocking(&frame);
  if(status == 0){
    ui->statusWindow->append(frame.data + "\r");
  }
  qApp->processEvents();
}

以及类似的接收功能:

int interface::recieveBlocking(struct frameStructure *frame){

  if(serialPort.waitForReadyRead(100)){
    QString read = serialPort.readLine().trimmed().simplified();
    int length;
    QString data;
    QString id;
    bool extended;
    if(read.left(1) == "t"){
      extended = false;
      id = read.mid(1,3);
      length = read.mid(4,1).toInt();
      data = read.mid(5).trimmed();
      if(read.length() < 5 || ((data.length()/2) < length))return 3;
    }else if(read.left(1) == "T"){
      extended = true;
      id = read.mid(1,8);
      length = read.mid(9,1).toInt();
      data = read.mid(10).trimmed();
      if(read.length() < 10 || ((data.length()/2) < length))return 3;
    }else{
      return 3;
    }
    frame->id = id;
    frame->length = length;
    frame->data = data;
    frame->extended = extended;
    return 0;
  }else{
    return 1;
  }
}

串行获取设置如下(每秒发送约80帧):

T18340418800009A1940000000
T1834041B83CD011CF00000000
T1834041F8596A090000CCF4FF
T1834042184C4300007A110600
T1834042280000000000000000
T18340423899115C00FFA75B00
T18340424833F304002C2C0100
T18340425800000006000000FB
T18340418800009A193F000000
T180C041880000000000002500
T18340418800009A193F000000
T18340418800009A193F000000
T180C041880000000000002500
T18340418800009A193F000000
T1834041B83CD011CF00000000
T1834041F85C870900003FF7FF
T1834042181D1900007A110600
T1834042280000000000000000
T18340423866465C00FFA75B00
T183404248CC4C030063C80000
T18340425800000006000000FB
T18340418800009A193F000000
T180C041880000000000002500
T18340418800009A193F000000
T18340418800009A193F000000
T1834041B83CD011CF00000000
T1834041F816020700004FF9FF
T1834042181185FFFF7A110600
T1834042280000000000000000
T18340423899115C00FFA75B00
T183404248FF1F040050FA0000
T18340425800000006000000FB
T180C041880000000000002500
T18340418800009A193F000000
T18340418800009A193F000000
T180C041880000000000002500
T181404188C300000000000000
T182C041881E00000000000000
T18340418800009A193F000000
T183C04188002C000000000000
T1824041880036000000000000
T18340418800009A193F000000
T1834041B83CD011CF00000000
T1834041F8CA82060000F5F5FF
T183404218B8E0FFFF6B100600
T1834042280000000000000000
T18340423899115C0099115C00

textBrowser中的输出如下所示:

0000000000002600 T18340418800009A193E000000

0000000000002500

00009A193E000000

00009A193E000000

3ED013CF00000000

6F4082FA0064E7FF T1834042181F2200001C0B0600 T1834042280000000000000000 T18340423832BB640032BB6400 T18340424899790200FB950000

00000006000000FB T180C041880000000000002500

00009A193E000000 T18340418800009A193E000000

0000000000002500

00009A193E000000

00009A193E000000

3ED013CF00000000

CC4A83FA0020EFFF T183404218DE6D00009A130600

0000000000000000 T18340423832BB640032BB6400 T183404248FF1F0400F9F90000 T18340425800000006000000FB

0000000000002500

0036000000000000 T18340418800009A193E000000

00009A193E000000

0000000000002500

00009A193E000000

3ED013CF00000000

083683FA00E7EBFF T1834042187FF8FFFFA9140600

0000000000000000 T1834042386686640066866400 T183404248CC4C030086C80000 T18340425800000006000000FB

00009A193E000000

0000000000002500

00009A193E000000

00009A193E000000

3ED013CF00000000

211384FA0074E9FF

C20E00004B0E0600 T1834042280000000000000000 T18340423832BB640032BB6400 T183404248CC4C0300A9C80000

00000006000000FB T180C041880000000000002500

00009A193E000000 T18340418800009A193E000000

0000000000002500

00009A193E000000

00009A193E000000

3ED013CF00000000

AECA82FA00D7E9FF T183404218911C00002C0C0600 T1834042280000000000000000 T1834042386686640032BB6400 T183404248CC4C0300FAC70000 T18340425800000006000000FB

0000000000002500

C300000000000000 T182C041881E00000000000000

00009A193E000000 T183C04188002F000000000000 T1824041880036000000000000 T18340418800009A193E000000

0 个答案:

没有答案