• qt之线程


    第一种创建:

    mythread1.h:

    #ifndef MYTHREAD_H
    #define MYTHREAD_H
    #include<QThread>
    #include<QDebug>
    
    class mythread:public QThread
    {
    public:
        mythread(const QString & s,QObject *parent=nullptr);
        void run();
        void working();
    private:
        const QString &str;
    };
    
    #endif // MYTHREAD_H

    mythread1.cpp:

    #include "mythread.h"
    #include<QDebug>
    mythread::mythread(const QString & s,QObject *parent)
        :QThread (parent),str(s)
    {
    
    }
     void mythread::run()
     {
         working();
         //exec();
     }
     void  mythread::working()
     {
         for(int i=0;i<10;i++)
         {
             qDebug()<<str<<i<<QThread::currentThreadId()<<endl;
         }
     }

    main.cpp:

    #include "widget.h"
    #include <QApplication>
    #include "mythread.h"
    #include<QDebug>
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    mythread my("s1");
    qDebug()<<"主线程在运行"<<endl;
    my.start();
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<"主线程在运行"<<endl;
    qDebug()<<my.wait()<<endl;
    //Widget add;
    //add.show();
    //    return a.exec();
    }

    效果:

    第二种创建:

    ,mythread2.h:

    #ifndef MYTHREAD2_H
    #define MYTHREAD2_H
    
    #include <QObject>
    
    class MyThread2 : public QObject
    {
        Q_OBJECT
    public:
        explicit MyThread2(const QString& s,QObject *parent = nullptr);
    
    signals:
    
    public slots:
        void working1();
        void working2();
    private:
        QString str;
    };
    
    #endif // MYTHREAD2_H

    mythread2.cpp:

    #include "mythread2.h"
    #include<QDebug>
    #include<QThread>
    MyThread2::MyThread2(const QString& s,QObject *parent)
        : QObject(parent),str(s){}
     void MyThread2::working1()
     {
         for(int i=0;i<10;i++)
         {
             qDebug()<<str<<i<<QThread::currentThreadId()<<"working1"<<endl;
         }
     }
     void MyThread2::working2()
     {
         for(int i=0;i<10;i++)
         {
             qDebug()<<str<<i<<QThread::currentThreadId()<<"working2"<<endl;
         }
     }

    widget.h:

    #ifndef WIDGET_H
    #define WIDGET_H
    #include<QThread>
    #include <QWidget>
    #include<QPushButton>
    #include "mythread2.h"
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    private:
    
        MyThread2 * mythread;
        QThread * ms;
    };
    
    #endif // WIDGET_H

    widget.cpp:

    #include "widget.h"
    #include<QHBoxLayout>
    #include<QThread>
    #include<QObject>
    #include<QDebug>
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
         QHBoxLayout *s=new QHBoxLayout(this);
          QPushButton *s1=new QPushButton("确定");
          QPushButton *s2=new QPushButton("取消");
          s->addWidget(s1);
          s->addWidget(s2);
        mythread=new MyThread2("mythread is starting...");
        ms=new QThread(this);
        mythread->moveToThread(ms);
        ms->start();
        connect(s1,SIGNAL(clicked()),mythread,SLOT(working1()));
        connect(s2,SIGNAL(clicked()),mythread,SLOT(working2()));
       connect(ms,SIGNAL(finished()),mythread,SLOT(deleteLater()));
    }
    
    Widget::~Widget()
    {
        qDebug()<<"~Widget()"<<endl;
        ms->quit();
        ms->wait();
    }

    main.cpp:

    #include "widget.h"
    #include <QApplication>
    #include "mythread.h"
    #include<QDebug>
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    //mythread my("s1");
    //qDebug()<<"主线程在运行"<<endl;
    //my.start();
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<"主线程在运行"<<endl;
    //qDebug()<<my.wait()<<endl;
    Widget add;
    add.show();
        return a.exec();
    }

    效果:

     

  • 相关阅读:
    Cocos2d-x 3.0 屏幕触摸及消息分发机制
    stretchableImageWithLeftCapWidth气泡拉伸
    海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()
    银联+移动+三星PK微信、余额宝
    热力学三大定律与熵
    热力学三大定律与熵
    OpenGL(六) gluLookAt和gluPerspective函数解析
    特殊字符
    特殊字符
    函数的功能
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/13277040.html
Copyright © 2020-2023  润新知