Kvaser、C++、Qt编写监控界面(二)

一、对DEMO - qtcandemo进行修改

       例程qtcandemo,采用了两个线程:主程序线程、和CAN信号读取线程。存在的问题是:打开界面,点击运行“Bus on”之后,再点击“Bus off”时,程序经常卡死。
       需要对canreader.cpp中的exec()进行修改。

  //原程序:
  while (is_running) {
    do {
      status = canReadWait(handle, &msg.id, &msg.data, &msg.dlc, &msg.flag, &msg.time, timeout);
      if (status == canOK) {
        emit gotRx(msg);
      }
    } while (status == canOK);
  }

  //修改为:
  while (is_running) {
    status = canReadWait(handle, &msg.id, &msg.data, &msg.dlc, &msg.flag, &msg.time, timeout);
    if (status == canOK) {
    	emit gotRx(msg);
    }
    else{
    	break;
    }
  }
二、基于对DEMO - qtcandemo的修改,增添新的功能
       例程中使用的线程如下:

       主线程(负责更新UI界面)
       rx_thread线程(负责读取CAN报文)

       由于例程仅仅是读取CAN的原始报文,并没有对报文进行解析,不方便对数据进行实时观测,所以我们需要在例程的基础上增加如下内容:

       dbc_thread线程(负责解析原始CAN报文)。
       rx_thread线程,通过信号CanMessage(原始报文)与dbc_thread线程中槽函数translatedRawMsg连接;实现对原始报文的翻译。
       dbc_thread线程,通过信号与主线程中的槽函数连接,实现数据的显示。
       dbc_thread线程的实现,参见下一遍博客。

你可能感兴趣的:(学习笔记,Qt)