QThread和pthread上创建的QObject可以相互emit signal吗?

本文探讨在QThread和pthread中创建的QObject对象如何正确实现信号和槽的双向通信。分析了QT信号槽的原理,指出了pthread_create与QThread的区别,提出了解决方案——通过创建Qt线程对象或将代码迁移至Qt线程来确保信号槽的正确分发。
摘要由CSDN通过智能技术生成

 

 

目录

 

前言

原理性的东西

来一段代码

思考的时间   

解决方法

心路历程和鸡汤时间


前言

        最近做一个项目的过程中遇到一个问题:在QThread和phread_create各自创建了一个QObject对象,两个对象之间的的信号只有一个方向能通。在开始阅读之前先抛出三个问题,大家可以带着问题来继续阅读:1、可能是哪个方向的信号->槽 不通呢?2、为什么会不通呢?3、应该怎么解决呢?

       

        最近做项目过程中遇到一个问题:QT的信号和槽之间连接成功了,但是发信号后绑定的槽接收不到!

        在两个线程中创建得到的两个QObject对象的信号和槽绑定成功后,竟然只能实现单向的连通!然后就开始一顿分析,为了解决这个问题,笔者做了很多的测试,也逼着自己把QT长长的一坨信号、槽实现corelib代码快速浏览了一遍!

原理性的东西

       真正解决问题需要把原理搞清楚。

       QT实现信号和槽的原理大概是这样的:一个完整的信号和槽之间建立工作关系分为三个阶段,第一阶段是连接的过程,第二阶段是调用的过程,第三阶段就是分发的过程;三个阶段的过程后续补充详细说明,每一个过程都比较长,后续考虑新增文章专门说明分析或者更新补充,这里概要说明。

  •               第一阶段:connect方法将signal/slot的方法字符串进行管理并绑定到对应的send/receive对象的元对象重要成员上;
  •               第二阶段:发送信号接口会进入元对象的acivate接口,接下来会进入qt_corelib的动态库中,主要完成跳转到特定对象上完成查找绑定的方法;这个过程中会涉及线程信息的判断,基于该设置判断值我们对这个信号的处理会跳转到不同的分支:1、Direct 调用
QThread 和 pthread 是两种不同的线程库。 pthread,全称为 POSIX Threads,是一种跨平台的线程库,它提供了一组函数和数据结构,用于创建和管理多线程的操作。pthread 是基于 C 语言的标准库,可以在多个操作系统上使用,包括 Linux、Unix 和 macOS 等。 QThreadQt 框架提供的一个类,用于实现多线程编程。Qt 是一个跨平台的应用程序框架,它提供了丰富的功能和工具,方便开发者进行图形界面和跨平台应用程序的开发。QThread 类封装了 pthread 的底层细节,并提供了更加高级和易用的接口。使用 QThread 可以方便地创建和管理多线程,并且与 Qt信号和槽机制无缝结合。 区别: 1. 语言和库:pthread 是基于 C 语言的标准库,而 QThreadQt 框架提供的类。 2. 跨平台性:pthread 是跨平台的线程库,可以在多个操作系统上使用;而 QThread 是基于 Qt 框架的,主要用于 Qt 应用程序开发,在不同平台上需要使用相应的 Qt 版本。 3. 接口和功能:QThread 提供了更高层次的接口和功能,比如信号和槽机制、事件循环等,使多线程编程更加便捷和灵活;而 pthread 提供了更底层的线程操作接口,需要手动管理线程的创建、销毁和同步等。 4. 集成性:QThread 可以与 Qt 的其他组件和功能无缝集成,比如图形界面、网络通信等;而 pthread 是一个独立的线程库,没有与其他框架的深度集成。 总的来说,pthread 是一个跨平台的标准线程库,适用于 C 语言开发的跨平台应用程序;而 QThreadQt 框架提供的一个高级多线程类,适用于 Qt 应用程序开发,提供了更加便捷和灵活的接口和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值