#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QThread>
#include "mywork.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
qDebug() << "主线程对象的地址: " << QThread::currentThread();
QThread* sub = new QThread;
MyWork* work = new MyWork;
work->moveToThread(sub);
sub->start();
connect(ui->startBtn, &QPushButton::clicked, work, &MyWork::working);
connect(work, &MyWork::curNumber, this, [=](int num)
ui->label->setNum(num);
});
MainWindow::~MainWindow()
delete ui;
使用这种多线程方式,假设有多个不相关的业务流程需要被处理,那么就可以创建多个类似于 MyWork 的类,将业务流程放多类的公共成员函数中,然后将这个业务类的实例对象移动到对应的子线程中 moveToThread() 就可以了,这样可以让编写的程序更加灵活,可读性更强,更易于维护。
文章目录Qt 线程中QThread的使用1. 线程类 QThread1.1 常用共用成员函数1.2 信号槽1.3 静态函数1.4 任务处理函数2. 使用方式 12.2 示例代码3. 使用方式 23.1 操作步骤3.2 示例代码Qt 线程中QThread的使用在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以
QThread的使用说明:QThread线程类是QT已经封装好的, 如果要使用线程, 就派生出子类并且实现线程接口函数run(run就是线程任务函数)
下面就用QThread实现当前系统时间的获取并且在主界面(UI线程)上显示,实现方法:在子线程中采集系统时间,通过信号发送给UI线程, 在ui线程上显示。
一、在QT工程中,新建一个类,并继承QThread
为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程。对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题。
前面,已经介绍了QThread常用的两种方式:
Worker-Object
子类化QThread
下面,我们来看看子类化QThread在日常中的应用。
子类化QThread
线程休眠...
线程中join(强制执行):当前线程执行完毕之后,才会执行后面程序,其他线程阻塞;
public class ThreadJoin implements Runnable{
@Override
public void run() {
for (int i = 1; i < 1000; i++) {
System.out.println("Join..."+i+"运行中");
public stat
一个QThread对象管理程序内的一个线程,QThreads在run()中开始执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内部运行一个Qt事件循环。
可以通过使用 QObject::moveToThread() 将对象移动到线程来使用它们。
class Worker : public QObject
Q_OBJECT
public slots:
void doWork(const QString ¶meter)
在程序设计中,为了不影响主程序的执行,常常把耗时操作放到一个单独的线程中执行。Qt对多线程操作有着完整的支持,Qt中通过继承QThread并重写run()方法的方式实现多线程代码的编写。针对线程之间的同步与互斥问题,Qt还提供了QMutex、QReadWriteLock、QwaitCondition、QSemaphore等多个类来实现。
本篇博客将针对以下几个方面进行讲解
[1]QThread...
在项目中,一个QThread对象管理了一个线程。一般来说,线程的执行从run()函数开始。在Qt中,有两种方式,第一个种是继承QThread重写run()函数,第二种是继承QObject函数添加耗时操作,然后在调用QObject::moveToThread()函数。Qt中现在比较推荐使用moveToThread()。
当线程开始或结束的时候,QThread会通过started()和finished()信号来通知,或者你也可以使用isRunning()和isFinished(...