Qt中运行后台线程不阻塞UI线程的方案

然后创建一个QThread线程,把整个MyTaskClass类的实例move到线程中就可以了:

#include <QtWidgets/QApplication>
#include <QThread>
#include "MyTaskClass.hpp"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QThread* backgroundThread = new QThread;
    backgroundThread->start();

     MyTaskClass *task = new MyTaskClass();
     task->moveToThread(backgroundThread);

    MainWindow w;
    w.show();
    return a.exec();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt线程UI线程同步的一种常见方法是使用信号和槽机制。可以在线程定义一个信号,然后在子线程调用emit函数发送该信号。然后,可以在线程连接该信号到槽函数,从而在线程处理该信号。 下面是一个示例代码: ``` // 线程定义信号 class MyThread : public QObject { Q_OBJECT signals: void mySignal(); }; // 子线程发送信号 class MyWorker : public QObject { Q_OBJECT public: MyWorker(MyThread *thread) : m_thread(thread) {} public slots: void doWork() { // 发送信号到线程 emit m_thread->mySignal(); } private: MyThread *m_thread; }; // 线程连接信号到槽函数 class MyWidget : public QWidget { Q_OBJECT public: MyWidget() { // 创建线程对象 m_thread = new MyThread; // 创建工作对象,并将线程对象传递给它 m_worker = new MyWorker(m_thread); // 连接信号和槽函数 connect(m_thread, &MyThread::mySignal, this, &MyWidget::onMySignal); // 启动线程 m_thread->start(); } private slots: void onMySignal() { // 在线程处理信号 // ... } private: MyThread *m_thread; MyWorker *m_worker; }; ``` 在这个示例,我们创建了一个MyThread类作为线程的信号发送者,一个MyWorker类作为子线程的工作对象,还有一个MyWidget类作为UI线程的槽函数接收者。在MyWidget的构造函数,我们创建了一个MyThread对象和一个MyWorker对象,并将它们连接起来,然后启动了MyThread线程。当MyWorker对象执行doWork函数时,会通过emit关键字发送mySignal信号到MyThread线程,然后在MyWidget定义的onMySignal槽函数接收和处理该信号。 通过这种方式,我们可以在不阻塞UI线程的情况下在线程处理子线程发送的信号,从而实现线程UI线程的同步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值