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();
     
  • 相关阅读:
    初识Node
    从服务器获取信息的方式
    引用对象的指针传递
    使用定时器来控制一次执行的任务数量
    JS字符串拼接的方法及性能比较
    提升JS比较效率的方式
    DOM访问优化
    JS数据存取效率的优化
    JS脚本加载顺序及优化
    python 基本用法
  • 原文地址:https://www.cnblogs.com/mathyk/p/9491816.html
Copyright © 2011-2022 走看看