大家好:
      之前做过一个
串口数据接收并且绘图的东西,但是发现当串口不停发送数据时,界面会卡死不响应,于是我想把串口接收数据放到QThread中,解析完数据后传给主线程UI绘图.
      但是现在Qthread中要连接槽函数,我的要在run()中初始化,在定时器的槽函数中读取数据,这样实际读取数据的那个槽函数依旧是在主
线程中,大数据量时依旧卡死...
      不知道各位大牛碰到类似的
问题都是怎么解决的,请教.
贴上新开的线程代码
- //.h
- #ifndef SERIALPORTTHREAD_H
- #define SERIALPORTTHREAD_H
- #include <QWidget>
- #include <QTimer>
- #include <QDebug>
- #include "qextserialport.h"
- /*POSIX CODE*/
- #ifdef _TTY_POSIX_
- #define QextBaseType Posix_QextSerialPort
- /*MS WINDOWS CODE*/
- #else
- #define QextBaseType Win_QextSerialPort
- #endif
- //========================================
- class SerialPortThread: public QThread
- {
-     Q_OBJECT
- public:
-     SerialPortThread();
-     ~SerialPortThread();
-     void run();
-     QextSerialPort SerialPort;
- private slots:
-     void readComData();
- };
- #endif // SERIALPORTTHREAD_H
- //.cpp
- #include "serialportthread.h"
- SerialPortThread::SerialPortThread()
- {
- }
- SerialPortThread::~SerialPortThread()
- {
-     qDebug()<<"~SerialPortThread()";
- }
- void SerialPortThread::readComData()//实际接收函数没有在run()里,没进线程
- {
-     QByteArray temp = SerialPort.readAll();
-     //if(temp.isEmpty())return;
-     qDebug()<<"In SerialPortThread::readComData()"<<temp.toHex();
- }
- void SerialPortThread::run(){
-     QTimer readComTimer;
-     QTimer transmitComTimer;
-     bool isOpened = false;
-     //for SerialPort
-     SerialPort.setQueryMode(QextSerialPort::Polling);
-     readComTimer.setInterval(1500);
-     transmitComTimer.setInterval(1500);
-     //for Init com
-     SerialPort.setPortName("COM7");
-     SerialPort.setBaudRate(BAUD115200);
-     SerialPort.setDataBits(DATA_8);
-     SerialPort.setParity(PAR_NONE);
-     SerialPort.setStopBits(STOP_1);
-     SerialPort.setFlowControl(FLOW_OFF);
-     SerialPort.setTimeout(200);
-     SerialPort.open(QIODevice::ReadWrite);
-     isOpened = SerialPort.isOpen();
-     qDebug()<<"isOpen = "<<isOpened;
-     connect(&readComTimer,SIGNAL(timeout()),this,SLOT(readComData()));
-     readComTimer.start();
-     this->exec();
- }