Qt自总结(一) QThread

        该总结源自对Qt官方文档的理解。
        有两种方式,一种是类似Java的Thread类的方式使用,即继承QThread,然后override父类的run方法,然后start开启线程,这种方法适合没有信号槽交互,就当作普通的线程来执行,像pthread。因为信号槽需要事件循环,父类中的run里面会调用exec开启新的事件循环,如果override了父类的run方法,当然就没有事件循环了,除非自己调exec,但是不知道父类的run里面调exec前还是否做了什么准备工作,所以自己调exec还是不太安全,不推荐。
        如果槽写在QThread的派生类里,则有以下几种情况:
        1. connect是在创建该线程对象的类里执行的,QueuedConnection,不管在哪发信, 槽都是在老线程里执行的。
        2. connect是在创建该线程对象的类里执行的,直连,在新线程中发信,槽是在新线程里执行的。
        3.  connect是在 新线程中执行的,直连,在新线程中发信,则槽是在新线程里执行的。
        4.  connect 是在 新线程中执行的,QueuedConnection在新线程中发信,则 槽是在老线程里执行的。
        这个是非主流方法,不再赘述。

        如果想要槽在新线程中执行,最好是用官方推荐的work-object方式。很简单,代码如下:
        QThread t;
        QObject o;
        o->movetothread(&t);
        connect();
        t.start();
        这个o对象的槽可以连接任何信号(any signal, from any object)。
        最后要说的是deleteLater,这个被调用后,等程序回到执行该函数所在线程的事件循环,相应的对象才会被delete。
Qt中的QThread类是用于创建和管理线程的类。它是基于线程API的封装,为我们提供了一个方便的方式来管理线程QThread类提供了一些方法和信号槽,可以用于启动、停止和控制线程的执行。 在给定的代码中,ThreadController类继承自QObject,并创建了一个ThreadWorker对象。然后,ThreadWorker对象被移交给workerThread,通过信号槽机制与ThreadController类进行通信。线程被启动后,touchWork信号被发出,从而触发线程执行work函数。 CustomThread类继承自QThread,并重写了run函数。在run函数中,线程会休眠10秒,然后发出customThreadSignal信号,从而触发customThreadSlot槽函数的执行。 在main函数中,首先创建了一个QCoreApplication对象。然后,创建了一个CustomThread对象,并通过信号槽连接了customThreadSignal信号和customThreadSlot槽函数。最后,启动了customThread线程总结起来,给定的代码演示了如何在Qt中使用QThread类创建和管理线程,并通过信号槽机制实现线程间的通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QT 线程QThread使用方式](https://blog.csdn.net/weixin_41111116/article/details/126372972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值