当前位置: 首页 > article >正文

QMetaObject::invokeMethod跨线程调用方法

创建工作类#includeQObjectclassWorker:publicQObject{Q_OBJECTpublic:explicitWorker(QObject*parentnullptr);Q_INVOKABLEbooloutputThread(constQStringtext){qDebug()textthread QThread::currentThread();returntrue;}publicslots:voidslotOutputThread(constQStringtext){qDebug()textthread QThread::currentThread();}};主线程中调用#includeQThread#includeworker.hvoidMainWindow::on_pushButton_clicked(){QThread*thdnewQThread();Worker*wkrnewWorker();wkr-moveToThread(thd);connect(thd,QThread::finished,this,[](){wkr-deleteLater();});connect(thd,QThread::finished,this,[](){thd-deleteLater();});connect(this,MainWindow::sendOutputThread,wkr,Worker::slotOutputThread);thd-start();QThread::sleep(1);//等待线程启动emitsendOutputThread(send);boolret_queuedfalse;boolret_directfalse;boolret_blockfalse;QMetaObject::invokeMethod(wkr,outputThread,Qt::QueuedConnection,Q_RETURN_ARG(bool,ret_queued),Q_ARG(constQString,queued));QMetaObject::invokeMethod(wkr,outputThread,Qt::BlockingQueuedConnection,Q_RETURN_ARG(bool,ret_block),Q_ARG(constQString,block));QMetaObject::invokeMethod(wkr,outputThread,Qt::DirectConnection,Q_RETURN_ARG(bool,ret_direct),Q_ARG(constQString,direct));qDebug()ret_queued ret_queued,ret_block ret_block;}打印结果main thdQThread(0x18ad5354980)QMetaMethod::invoke:Unable to invoke methods withreturnvalues in queued connectionssendthreadQThread(0x18ad7b47a30)blockthreadQThread(0x18ad7b47a30)directthreadQThread(0x18ad5354980)ret_queuedfalse,ret_directtrue,ret_blocktrue提示QMetaMethod::invoke: Unable to invoke methods with return values in queued connections这是因为Qt::QueuedConnection用于异步的、跨线程的方法调用但有一个重要限制它不能直接用于调用带有返回值的方法把返回值去掉再把阻塞形式Qt::BlockingQueuedConnection注释运行结果如下main thdQThread(0x1e96bfd4690)directthreadQThread(0x1e96bfd4690)sendthreadQThread(0x1e96e8dd6d0)ret_queuedfalse,ret_directtrue,ret_blockfalsequeuedthreadQThread(0x1e96e8dd6d0)分析一下①Qt::QueuedConnection用于异步的、跨线程的方法调用不能直接用于调用带有返回值的方法②Qt::DirectConnection立即在当前线程执行可以获取返回值③Qt::BlockingQueuedConnection跨线程同步调用可以获取返回值。但使用该类型一定要注意确保两个线程不会相互等待而造成死锁例如在工作线程中阻塞等待主线程④Qt::AutoConnection​ 这是未测试的方法该方法可以根据对象线程关系自动选择Direct或Queued⑤Q_INVOKABLE修饰函数会将函数暴漏给元对象系统允许外部安全调调用甚至是突破权限private、protected函数均可实现⑥信号与槽的方式仍是最安全最值得推荐的方式

相关文章:

QMetaObject::invokeMethod跨线程调用方法

创建工作类 #include <QObject>class Worker : public QObject {Q_OBJECT public:explicit Worker(QObject *parent nullptr);Q_INVOKABLE bool outputThread(const QString &text){qDebug()<<text << "thread "<<QThread::currentThr…...

串联构型混合动力汽车Simulink仿真模型建模:基于成熟软件架构与功率跟随控制策略的完整正向...

串联构型混合动力汽车Simulink仿真模型建模&#xff0c;正向仿真模型&#xff0c;采用成熟人车路软件架构&#xff0c;基于功率跟随控制策略&#xff0c;包含完整的初始化文件&#xff0c;整车模型&#xff0c;以及说明文档&#xff0c;可进行适当。 也可提供其他变种构型&…...

DynamicLake:为Mac带来灵动岛交互体验,支持应用与通知 | ProductHunt 今日热榜 - 03月16日

今日榜单登顶产品 DynamicLake 以 343 票登顶今日热榜&#xff01;这是一款为Mac移植灵动岛交互体验的工具&#xff0c;整合通知、快捷转换等多种功能&#xff0c;让桌面交互更直观高效。 本期亮点产品介绍 本期Product Hunt热榜AI相关产品占比超一半&#xff0c;围绕OpenCla…...

Thinkphp和Laravel框架微信小程序的健康管理系统医院挂号预约

目录技术选型与架构设计用户端功能实现医生管理后台支付与通知系统性能优化策略安全防护措施项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端框架选择ThinkPHP或Laravel&#…...

AI写论文必备!4款AI论文生成工具,高效解决论文写作难题!

学术论文写作难题与AI工具解决方案 在撰写学术论文时&#xff0c;无论是期刊论文、毕业论文还是职称论文&#xff0c;研究人员往往会遇到许多棘手的问题。面对海量的文献资料&#xff0c;寻找相关的信息如同大海捞针&#xff1b;而复杂的格式要求则常常让人苦不堪言&#xff1…...

开启外部中断的标准步骤

步骤1&#xff1a;初始化GPIO GPIO_InitTypeDef GPIO_InitStructure; // 1. 开启GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 2. 配置GPIO为输入模式&#xff08;通常是浮空输入或上拉输入&#xff09; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_…...

无人机与手机照片POS信息提取工具|支持JPG批量读取与导出

温馨提示&#xff1a;文末有联系方式工具核心功能概述 本工具专为地理信息与航测工作者设计&#xff0c;可高效提取无人机航拍影像及普通智能手机拍摄的JPG照片中嵌入的POS&#xff08;Position and Orientation System&#xff09;元数据&#xff0c;涵盖经度、纬度、海拔、拍…...

7×24小时智能值守的企业微信AI智能客服系统源码

温馨提示&#xff1a;文末有资源获取方式为企业打造全天候、智能化的客户服务体系&#xff0c;基于PHP原创开发&#xff0c;源码获取方式在源码闪购网&#xff0c;深度集成企业微信&#xff0c;提供以下核心功能&#xff1a;全天候智能值守系统724小时自动响应客户咨询&#xf…...

罗克韦尔 1440-SCDB9FXM2通信电缆

1440-SCDB9FXM2 是罗克韦尔自动化旗下 Allen-Bradley 品牌&#xff0c;专为 1440 XM 系列设备状态监测模块设计的原厂专用串行通信电缆&#xff0c;是 XM 系统组态调试、现场运维的核心配件。一、产品特性专属原生适配&#xff1a;专为 XM 全系列设备状态监测模块&#xff08;X…...

AI教材生成工具推荐,低查重率为教材质量保驾护航!

教材格式的复杂性一直困扰着许多编写者。比如说&#xff0c;标题的字体大小应该设定为多少&#xff1f;参考文献是按照GB/T7714标准还是应该遵循某些出版机构的独特规范&#xff1f;习题的排版是选择单栏&#xff0c;还是双栏更合适&#xff1f;这些不同的要求让人眼花缭乱&…...

手把手拆解工业级ISP算法源码

ISP算法源码 资料最齐全&#xff0c;全网最低&#xff0c;包含Cmodel执行文件&#xff0c;可读源代码等等。 也有骗子搞成号称有Cmodel执行文件注意甄别&#xff0c;甚至宝贝描述都是抄我的 也可以在xilinx平台例化图形界面&#xff0c;方便使用 功能涵盖&#xff1a; DPC坏点缺…...

考虑集流体的 Comsol sofc固体氧化物燃料电池仿真(温度场分布,气体分布,极化曲线

考虑集流体的 Comsol sofc固体氧化物燃料电池仿真&#xff08;温度场分布&#xff0c;气体分布&#xff0c;极化曲线&#xff0c;性能曲线&#xff09;凌晨三点盯着屏幕上的温度云图&#xff0c;我手里的冰美式已经见底。集流体的边缘区域突然出现一块诡异的低温区&#xff0c;…...

N 3 串口

一、串口UART&#xff1a;Unervisal Async Recveiver Transimitter&#xff0c;通用异步收发器。&#xff08;全双工&#xff0c;串行&#xff09;RXD&#xff1a;接收信号线TXD&#xff1a;发送信号线CH340&#xff1a;电平转换芯片单工&#xff1a;通信时&#xff0c;数据接收…...

513. 找树左下角的值-day16

本地要找出树的最后一行找到最左边的值。此时大家应该想起用层序遍历是非常简单的了&#xff0c;反而用递归的话会比较难一点。我们依然还是先介绍递归法。咋眼一看&#xff0c;这道题目用递归的话就就一直向左遍历&#xff0c;最后一个就是答案呗&#xff1f;没有这么简单&…...

DO-254通读--11.0 附加考虑

11.0 附加考虑 本节提供了前几节未涵盖的设计保证附加考虑事项的指南。申请人可酌情使用这些附加考虑来满足第2节至第9节的部分目标。任何附加考虑的使用均应征得审定机构的同意。 11.1 使用先前已开发的硬件 本节讨论与使用先前已开发的硬件相关的问题。指南包括对硬件修改…...

AI写教材的秘密武器!实现低查重教材生成的实用工具推荐

撰写教材现状及 AI 工具的作用 撰写教材的进度总是会在“慢节奏”中踩到许多雷区。本来框架和资料都已经齐备&#xff0c;却在内容写作上遭遇瓶颈——一句话反复琢磨半天&#xff0c;依旧觉得表达不够准确&#xff1b;章节之间的衔接&#xff0c;总是绞尽脑汁也找不到合适的语…...

内窥镜加热器如何选择红外LED加热光源

内窥镜加热器在医疗和工业领域中扮演着关键角色&#xff0c;特别是在低温环境下需要确保内窥镜的正常工作。选择合适的红外LED加热光源对于提高内窥镜的性能和可靠性至关重要。本文将从内窥镜加热方式的发展、红外LED光源的选择、内窥镜加热器的应用案例和方案&#xff0c;以及…...

Vivado FPGA输入时钟约束

## 40mhz时钟输入 set_property PACKAGE_PIN F17 [get_ports f_clk40mhz] set_property IOSTANDARD LVCMOS33 [get_ports f_clk40mhz] create_clock -period 25.000 -name f_clk40mhz -waveform {0.000 12.500} [get_ports f_clk40mhz]前两行是引脚约束&#xff0c;后一行是时…...

昆仑通态触摸屏485通讯恒压供水程序(一拖二)

昆仑通态触摸屏485通讯ABB做的恒压供水程序&#xff0c;不需要PLC 恒压供水一拖二程序 1.触摸屏程序MCGpro版本&#xff0c;也有优盘格式文件 2.有ABB变频器一拖二设置参数及接线图纸&#xff0c;(可不用触摸屏) 3.有CAD图纸&#xff0c;二次图&#xff0c;昆仑通态的触摸屏直接…...

高德地图车机版9.1.0.600087美化包

资源编号235_高德地图车机版9.1.0.600087正式版。 更新自定义dex版本至20260311。 全新自定义修改脚本&#xff0c;修复已知bug&#xff0c;增加稳定性。 支持悬浮/原包/共存_鹰眼预警/ai预测/红绿灯播报/变灯提醒/超速提醒/天气播报等 点我下载 ❗关于系统版本&#xff1…...

【最新】OpenClaw(Clawdbot)本地6分钟搭建及使用萌新步骤

【最新】OpenClaw&#xff08;Clawdbot&#xff09;本地6分钟搭建及使用萌新步骤。OpenClaw&#xff08;Clawdbot/Moltbot&#xff09;作为开源、本地优先的AI助理框架&#xff0c;凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力&#xff0c;成为个人办公与轻量…...

多策略混合的北方苍鹰优化算法:基于立方混沌与透镜反向学习的种群初始化及最差最优策略对比原始NG...

多策略混合改进的北方苍鹰优化算法--MATLAB 改进&#xff1a; 1、立方混沌和透镜反向学习初始化种群 2、最差最优反向策略和透镜反向学习 对比原始NGO算法江湖上优化算法多如牛毛&#xff0c;今儿咱们来盘一盘这个自带猛禽气质的北方苍鹰优化算法&#xff08;Northern…...

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游简介 米哈游(miHoYo)是全球领先的游戏开发公司,以《原神》《崩坏》系列闻名,技术实力雄厚且注重二次元文化。作为技术驱动型公司,米哈游在AI技术应用上走在行业前沿,尤其在游戏NPC智能交互、内容生成、玩家体验优化等方面有深度探索。AI产品经理岗位要求既懂技术又…...

深度拆解OpenClaw:引爆“赛博养虾”狂潮的技术内核、产业重构与暗面危机

&#x1f525;作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生&#xff0c;研究方向无线联邦学习 &#x1f3ac;擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 ❄️作者主页&#xff1a;一个平凡而…...

联想老机型无对应 BIOS 可下载?官方解答 + 操作建议全在这

不少使用联想老款电脑的用户都会遇到这样的困惑&#xff1a;想升级 BIOS 优化设备性能、解决硬件兼容问题&#xff0c;却在官方渠道翻遍了也找不到对应机型的 BIOS 安装包&#xff0c;不知道是操作方式不对&#xff0c;还是官方已停止相关支持&#xff0c;也不敢随意下载第三方…...

Java异常与事务回滚:从Throwable顶层继承到rollbackFor陷阱的深度解析

在Java企业级开发中&#xff0c;异常处理与事务管理是保障系统稳定性的两大基石。然而&#xff0c;许多开发者在面对Transactional注解的rollbackFor属性、try-catch块中的异常处理以及Java异常体系的顶层结构时&#xff0c;往往存在认知误区。本文将从异常体系的顶层父类出发&…...

小白收藏必备:快速掌握AI Agent主流设计模式,轻松入门大模型开发

本文介绍了AI Agent的几种主流设计模式&#xff0c;包括ReAct、Plan & Execute、ReWOO、LLM Compiler、反思与增强类架构以及LATS。通过分析这些模式的核心概念、工作原理、优缺点和典型应用场景&#xff0c;帮助初学者理解AI Agent的设计思路&#xff0c;为后续深入研究Cl…...

基于MATLAB的蚁群算法:二维与三维路径优化及可视化输出研究

基于matlab的蚁群优化路径算法&#xff0c;二维路径和三维路径优化。 输出可视化最优路径和距离迭代曲线。 数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。蚁群优化这玩意儿看着复杂&#xff0c;其实用Matlab玩起来还真挺有意思。咱今天不整那些虚头巴脑的理…...

3调度和上下文切换

第3章 调度和上下文切换 0. 导言&#xff1a;并发执行的幻觉 并发的本质&#xff1a;操作系统通过在处理器上频繁切换不同的任务&#xff0c;给用户造成多个任务“同时”处理的幻觉。核心机制&#xff1a;上下文切换。 步骤&#xff1a; 停止当前进程。保存足够的信息&#xff…...

debug记录

1、头文件重复包含。 包含链分析&#xff1a; bsp_Seg7.h:12 包含了 lks32mc45x_define.happ_Comm.h:3 包含了 lks32mc45x.h而 lks32mc45x.h 很可能也直接或间接包含了 lks32mc45x_define.h 关键问题&#xff1a; 我之前读取的 lks32mc45x_define.h 缺少头文件保护&#xf…...