QT线程创建的两种方式

需求:串口阻塞读取数据,同时还需要发送数据。

设计:两个槽函数,一个用于阻塞读取串口数据,一个用于接收信号,发送数据到串口,由于读取串口的槽函数是阻塞读,导致发送槽函数没有办法处理。

修改:修改线程创建的方式,继承Thread类去创建线程,重写run函数去阻塞读取,发送槽函数是在主线程去执行。这样就解决了问题。

一、继承Thread类,重写run()方法步骤:

  1. 创建类继承Thread
  2. 重写Thread类的run方法
  3. 调用线程的start方法(该方法有两个作用:创建线程,调用run方法)

这种方式 只有Run函数是在一个新起的线程里,该线程的槽函数是跑在主线程里面的。

示例代码:

app.h

#ifndef APP_H
#define APP_H
#include 
#include 
#include 
class Send:public QObject
{
    Q_OBJECT
public:
    Send();
    ~Send();
public slots:
    void emitsig()
    {
        emit sig();
    }
signals:
    void sig();
};

class Recv:public QThread
{
    Q_OBJECT
public:
    Recv();
    ~Recv();
    void objstart()
    {
        this->start();
    }
public slots:
    void slot()
    {
        qDebug()<<"recv

你可能感兴趣的:(QT,qt,开发语言)