zoukankan      html  css  js  c++  java
  • qt创建线程总结

    一、创建一个长时间运行的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());
        });
    
    }
  • 相关阅读:
    C++学习笔记27,虚函数作品
    HDU
    POJ 2524 Ubiquitous Religions
    HDU-3839-Ancient Messages(DFS)
    thinkphp 删除所有缓存 Rumtime 以及 Html 静态缓存
    [AngularJS] Design Pattern: Simple Mediator
    [Javascript] Add a browser build to an npm module
    [Angular 2] ngrx/store
    [Typescript] Introduction to Generics in Typescript
    [AngularJS] angular-md-table for Angular material design
  • 原文地址:https://www.cnblogs.com/ch122633/p/12100283.html
Copyright © 2011-2022 走看看