zoukankan      html  css  js  c++  java
  • 使用QT在子线程中访问串口

      在开发过程中遇到个串口读取问题记录如下。

      

    PlaneDataHandleThread::PlaneDataHandleThread(QObject *parent)
    	: QThread(parent)
    {
    
    }
    
    PlaneDataHandleThread::~PlaneDataHandleThread()
    {
    }
    void PlaneDataHandleThread::run()
    {
    	qDebug() << "无人机线程"<<currentThreadId();
    	m_ser.setBaudRate(QSerialPort::Baud57600);
    	m_ser.setDataBits(QSerialPort::Data8);
    	m_ser.setParity(QSerialPort::NoParity);
    	m_ser.setStopBits(QSerialPort::OneStop);
    	m_ser.setFlowControl(QSerialPort::NoFlowControl);
    	m_ser.setPortName("com3");
    	bool b = m_ser.open(QIODevice::ReadOnly);
    	//connect(&m_ser, &QSerialPort::readyRead, this, &PlaneDataHandleThread::onDataReady);
    	while (m_bRun)
    	{
    		qDebug() << m_ser.readAll();
    	}
    	
    }
    //void PlaneDataHandleThread::onDataReady()
    //{
    //	qDebug() << m_ser.bytesAvailable() << endl;
    //}
    void PlaneDataHandleThread::connPlane()
    {
    	m_bConnected = true;
    }
    void PlaneDataHandleThread::quit()
    {
    	m_bRun = false;
    }
    

      按正常理解这个地方会调试输出串口内容,实际上啥也输出不了,修改如下即可。

    	while (m_bRun)
    	{
    		m_ser.waitForReadyRead();//添加此代码后下面的代码就可以输出内容
    		qDebug() << m_ser.readAll();
    	}
    

      也可以使用信号方式读取数据

    void PlaneDataHandleThread::run()
    {
    	qDebug() << "无人机线程"<<currentThreadId();
    	m_ser.setBaudRate(QSerialPort::Baud57600);
    	m_ser.setDataBits(QSerialPort::Data8);
    	m_ser.setParity(QSerialPort::NoParity);
    	m_ser.setStopBits(QSerialPort::OneStop);
    	m_ser.setFlowControl(QSerialPort::NoFlowControl);
    	m_ser.setPortName("com3");
    	bool b = m_ser.open(QIODevice::ReadOnly);
    	connect(&m_ser, &QSerialPort::readyRead, this, &PlaneDataHandleThread::onDataReady);
    	while (m_bRun)
    	{
    		m_ser.waitForReadyRead();
    	}
    }
    void PlaneDataHandleThread::onDataReady()
    {
    	qDebug() << m_ser.readAll() << endl;
    }
    

      

  • 相关阅读:
    BZOJ 3208: 花神的秒题计划Ⅰ
    BZOJ 3207: 花神的嘲讽计划Ⅰ
    BZOJ 2732: [HNOI2012]射箭
    BZOJ 3165: [Heoi2013]Segment
    BZOJ 3626: [LNOI2014]LCA
    2017 01 16 校内小测 ZXR专场
    BZOJ 3101: N皇后
    BZOJ 1106: [POI2007]立方体大作战tet
    BZOJ 2084: [Poi2010]Antisymmetry
    【UOJ#228】基础数据结构练习题 线段树
  • 原文地址:https://www.cnblogs.com/gushandujian/p/14490675.html
Copyright © 2011-2022 走看看