qt创建线程总结

摘要:
1、 创建长时间运行的QT线程#ifndefMYPRINTJOB_H#defineMYPRINTJOB_H#include#include#include“MyOperation/myslicefile.H”classMyPrintJob:publicQObject{Q_OBJECTpublic:explicitMyPrintJob(QObject*paren

一、创建一个长时间运行的QT线程

#ifndef MYPRINTJOB_H
#define MYPRINTJOB_H

#include <QObject>
#include <QThread>

#include "MyOperation/myslicefile.h"

class MyPrintJob : public QObject
{
    Q_OBJECT
public:
    explicit MyPrintJob(QObject *parent = nullptr);
    ~MyPrintJob();

public slots:
    void StartPrintWorkSlot();

private:
    QThread *m_printJobThread;
};

#endif // MYPRINTJOB_H

然后cpp文件

#include "myprintjob.h"

MyPrintJob::MyPrintJob(QObject *parent) : QObject(parent)
{
    m_printJobThread = new QThread();
    connect(m_printJobThread, &QThread::started, this, &MyPrintJob::StartPrintWorkSlot);

    this->moveToThread(m_printJobThread);
    m_printJobThread->start();
}

MyPrintJob::~MyPrintJob()
{
    if(m_printJobThread->isRunning()) {
        m_printJobThread->quit();
        m_printJobThread->wait();
    }
}

void MyPrintJob::StartPrintWorkSlot()
{

}

二、创建一种可以停止的线程

#ifndef THREADTEST_H
#define THREADTEST_H

#include <QObject>
#include <QThread>
#include <QDebug>
#include <QTimer>


class ThreadTest : public QObject
{
    Q_OBJECT
public:
    explicit ThreadTest(QObject *parent = nullptr);
    ~ThreadTest();

signals:
    void workFinished();
public slots:
    void doWork();
private:
    QThread *thread;

};

#endif // THREADTEST_H

cpp文件:

#include "threadtest.h"

ThreadTest::ThreadTest(QObject *parent) : QObject(parent)
{
    thread = new QThread();
    connect(thread, &QThread::started, this, &ThreadTest::doWork);
    connect(this, &ThreadTest::workFinished, thread, &QThread::quit);
    connect(thread, &QThread::finished, this, &ThreadTest::deleteLater);
    connect(thread, &QThread::finished, thread, &QThread::deleteLater);
    this->moveToThread(thread);
    thread->start();
}

ThreadTest::~ThreadTest()
{
    qDebug()<<"~ThreadTest()";
}

void ThreadTest::doWork()
{
    qDebug()<<"doWork()";
    QTimer::singleShot(5000, this, [=](){
        emit(workFinished());
    });

}

免责声明:文章转载自《qt创建线程总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql 临时表的好处RAID0的条带大小设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pyqt5学习之QThread

       pyqt的线程的使用非常简单-建立一个自定义的类(如thread),使它继承自QThread,并实现其run()方法即可; 在使用线程时可以直接得到thread实例,调用其start()函数即可启动线程。线程启动后,会自动调用其实现run方法,该方法就是线程的执行函数。        业务的线程任务就写在run()函数中,当run()退出之后...

QT5:网络

QNetworkAccessManager的post方法 多线程 同步 异步 八.QT5多线程和多进程 1.多线程 QThread是Qt线程中一个公共的抽象类,所有的线程类都是从QThread抽象类中派生的,需要实现QThread中的虚函数run(),通过调用start()函数 QThread对多线程的支持: 1.QThreadStorag...

QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)

可以通过QThread实现跨平台的多线程开发,Qt库负责在特定平台上的特定多线程实现。要采用QThread进行多线程开发,首先需要包含头文件: #include <QThread> 然后需要从QThread继承一个自己的线程类,暂作MyThread,关键是要实现QThread内的一个虚函数run。在run函数内部,最后一般都调用exec(),使...

QT5 Thread线程

QT5 Thread线程继承QThread方式 一.首先分析一下 QTimer Class与 Sleep()函数之间的秘密 QTimer *t = new QTimer(*parent); //创建QTimer 对象 t->start(_time); //计时开始每隔_time时间自动触发&QTimer::timeout信号 t->st...

[转]QT子线程与主线程的信号槽通信-亲测可用!

近用QT做一个服务器,众所周知,QT的主线程必须保持畅通,才能刷新UI。所以,网络通信端采用新开线程的方式。在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦。网上提供了很多同一线程不同类间采用信号槽通信的方式,但是并不完全适合线程间的信号槽通信,这主要体现在自定义消息的传递上。 首先我们看看一般的方式:利用信号-槽发送Qt内置的元数据类型testthre...

Qt 学习之路 2(75):线程总结

前面我们已经详细介绍过有关线程的一些值得注意的事项。现在我们开始对线程做一些总结。 有关线程,你可以做的是: 在QThread子类添加信号。这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送者的线程依附性没有关系) 不应该做的是: 调用moveToThread(this)函数 指定连接类型:这通常意味着你正在做错误的事情,比如将QThread控...