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

问题

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

解决方案

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

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

一下是实现的部分代码

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

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

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

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

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

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

编辑:myhappyandy

相关推荐
comcoo几秒前
电脑自动干活不用值守!OpenClaw 本地部署完整实操流程
windows·开源·github·open claw部署·open claw部署包
华如锦1 分钟前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai
huangdong_4 分钟前
电商商品SKU图自动分类技术实现:从DOM解析到智能归档
开发语言
dog2507 分钟前
网络长尾延时的重尾本质
开发语言·网络·php
旖-旎7 分钟前
FloodFill(图像渲染)(1)
c++·算法·深度优先·力扣
戴西软件20 分钟前
戴西 DLM 许可授权管理系统:破解无网络环境下工业软件授权难题,助力制造企业降本增效
网络·人工智能·python·深度学习·程序人生·算法·制造
Dxy123931021629 分钟前
Python线程锁:为什么多线程会“打架“,以及怎么解决
开发语言·前端·python
guygg8840 分钟前
人行走作用下板的振动响应 MATLAB 仿真
开发语言·matlab
小白学大数据1 小时前
线上故障急救:依托 OpenClaw 日志排查 403 和 503 问题
爬虫·python·selenium·数据分析
蓝鸟19741 小时前
Windows Route 内外网双通原理+实战详解(彻底解决双网卡互斥断网)
windows·网络运维·电脑网络配置·路由冲突解决·route命令·内外网同时上网·windows路由 双网卡双通