zoukankan      html  css  js  c++  java
  • QThread的用法

      Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能即使响应用户的请求操作。

     方法一 QObject::moveToThread()

           1.将执行对象放到线程中

      2.建立相关的信号函数和槽函数进项连接,然后发出信号触发QThread的槽函数,使其执行工作。

    //线程执行对象
    myT = new MyThread();
    //创建子线程
    thread = new QThread();
    //把自定义模块添加到子线程中
    myT->moveToThread(thread);
    //启动子线程,但是,并没有启动线程处理函数
    thread->start();
    //线程处理函数必须通过 signal-slot 调用
    connect(ui->pushButton,&QPushButton::pressed,myT,&MyThread::drawImage);
    connect(this,&Widget::destroyed,this,&Widget::dealClose);
    void Widget::dealClose()
    {
         //退出线程
        thread->quit();
        //回收资源
        thread->wait();        
    }

     方法二 继承QThread

    1.自定义一个继承QThread的类MyThread,重载MyThread中的run()函数,在run()函数中写入需要执行的工作。

    2.调用start()函数来启动线程。

    class MyThread : public QThread
    {
            Q_OBJECT
        public:
            MyThread(QObject* parent = nullptr);
            //自定义发送的信号
        signals:
            void mythread_signal(const int);
            //自定义槽
        public slots:
            void mythread_slots(const int);
        protected:
            void run() override;
    };
    MyThread::MyThread(QObject
    *parent) { } void MyThread::run() { qDebug()<<"myThread run() start to execute"; qDebug()<<"current thread ID:"<<QThread::currentThreadId()<<' '; //循环一千次 int count = 0; for(int i = 0;i!=1000;++i){ ++count; } //发送结束信号 emit mythread_signal(count); exec(); } void MyThread::mythread_slots(const int val) { qDebug()<<"myThreadSlot() start to execute"; qDebug()<<"current thread ID:"<<QThread::currentThreadId()<<' '; //循环一千次 int count = 2000; for(int i = 0;i!=1000;++i){ ++count; } emit mythread_signal(count); }

    pMyThread = new MyThread();
    //启动该线程
    pMyThread->start();
     
  • 相关阅读:
    流程控制语句
    VMware虚拟机与Linux Centos7下载及安装教程
    ReduceTask的运行
    Spark最简单基础_欢乐的马小纪
    虚拟机扩容
    centos安装docker
    kafka生产消费者demo
    虚拟机NAT网络
    Spark开发的完整基础_欢乐的马小纪
    centos6 克隆虚机的紧要知识点_____马小纪&
  • 原文地址:https://www.cnblogs.com/mathyk/p/9491816.html
Copyright © 2011-2022 走看看