码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2020-08-10 18:37:36      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:idg   发送   thread   多任务   timer   ted   间接   lpm   protect   

1、qt4.7以前版本处理方式,多线程的使用

  1、自定义一个类,继承于QThread,

class MyThread : public QThread
{
    publicvoid run();     // 多任务执行函数
   
    signals:
        void isDone();   // 处理完成后需要发送信号需要知道,线程处理完成任务
}
void run()   // 函数实现
{
    // 处理复杂任务
   // 发送信号  任务处理完成
    emit isDone();
}

    

  2、使用的地方需要创建一个类对象

MyThread thread;


// 在需要多任务的地方启动线程
// 不可以直接掉用run()
// start() 间接调用run()

thread.start();   // 启动线程

3、线程使用

  1、创建一个类继承QThread

#include <QThread>

class myThread : public QThread
{

protected:
    void run();  // 重写虚函数 线程的入口函数
signals:
    void isDone();  // 发信号 说明线程结束了
};

  2、实现run()函数

void myThread::run()
{
    qDebug() << ";正在睡觉";
    sleep(5);   // 任务处理代码
    emit isDone();  // 发送信号 说明该线程结束了
}

  3、线程启动,转去执行run()

void Widget::on_buttonStart_clicked()
{
    if(myTimer->isActive() == false)
    {
        myTimer->start(100);
    }
    // 需要多线程的地方 启动线程
    thread->start();   // 启动线程
}

  4、等待run()发出线程结束信号,并处理信号

thread = new myThread(this);
// 处理线程结束信号标志
connect(thread,&myThread::isDone,this,&Widget::dealPmythread);

  5、线程结束处理

void Widget::dealPmythread()
{
    qDebug() << "deal over";
    myTimer->stop();   // 线程结束了 进一步处理
}

  6、释放线程资源

// 窗口右上角X 关闭时,发出信号处理, 释放线程资源
    connect(this,&Widget::destroyed,this,&Widget::closeThread);

  7、释放线程 函数实现

void Widget::closeThread()
{
    thread->quit();   // 关闭线程
    thread->wait();   // 等待线程处理完资源
}

 

多线程

标签:idg   发送   thread   多任务   timer   ted   间接   lpm   protect   

原文地址:https://www.cnblogs.com/lbx-cnblogs/p/13471440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!