c++多线程QThreadpool调用Python脚本时崩溃报错的解决方案二

问题

还是c++ Qt多线程调用Python脚本时的问题。使用QthreadPool的方式调用,按照上次的解决方案也可以实现,虽然可能不出现崩溃问题。但是仍然有很大可能会出现死锁。即调入函数后,再无输出,变成一个黑洞...

解决方案

因为我使用的是QThreadPool线程池,如果将线程池定义为自动释放,那么线程将会反复起关,所以理论上设置为手动释放会好一些。

所以我决定,手动启动线程,假如我先启动八个线程,并在构造函数初始化,在析构函数释放。所以八个线程在启动时就初始化OK,在结束程序时才释放,不在随机控制。分配调用时也是使用Q_Invokable接口调用,这样就能够实现跨线程安全。

一下是实现的部分代码

pylock 用在调用Python脚本函数的最上面。

也就是下面图片的CallPythonFunction的最上面。

这个是头文件,集成Qobject,主要是要实现八个线程,然后使用moveToThread函数来实现。

方法声明为Q_Invokable 主要是在主线程来调用线程里面的方法,使用QMetaObiect::invokeMethod方法调用,这样既能跨线程,也能保证线程安全队列。

这里是初始化和关闭初始化时做的事,还是前面文章说的,有的函数还是不能调用。但是我这里启用线程后,不会反复开关,一直到关闭程序才释放。理论上是所有八个线程只需要调用一次初始化,但是测试发现,每个线程都需要初始化一次。

希望帮助到各位困惑的您!

编辑:myhappyandy

相关推荐
zhonyu鱼1 分钟前
Drawpile:多人实时协作绘画,一起在同一块画布上画画
笔记·pdf·开源·开源软件
H愚公移山H3 分钟前
Tengine2.4.1 + OpenSSL1.1.1w 全平台编译踩坑手册(CentOS7 x86_64|Linux x64|ARM64|2026实战复盘)
python
码云骑士14 分钟前
120-视频理解-大模型视频分析-抽帧-自动字幕摘要-高光片段
python·音视频
xfan_me20 分钟前
手机在网状态接口-空号查询-空号过滤API
数据库·人工智能·python·智能手机
HugoStudio_SWAN22 分钟前
【按键反馈】C++ 实现键盘烟花秀
开发语言·c++·学习·程序人生
测试秃头怪23 分钟前
Postman中变量的使用
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
间歇性努力持续性发呆的野生快乐选手24 分钟前
二分模板(整型,浮点型)
数据结构·c++·算法
ynchyong24 分钟前
词云(Word Cloud) 使用方法
python·统计·词云
艾莉丝努力练剑33 分钟前
【AI大模型接入SDK】DeepSeek API 基础概述
c++·人工智能·学习·ai·面试·deepseek
AI 编程助手GPT33 分钟前
Bun 1.4 正式发布:从 Zig 改写为 Rust,内置浏览器、图片处理和并行测试
开发语言·人工智能·后端·ai·chatgpt