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

问题

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

解决方案

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

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

一下是实现的部分代码

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

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

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

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

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

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

编辑:myhappyandy

相关推荐
liulilittle几秒前
VEthernet 框架实现 tun2socks 的技术原理
网络·windows·c#·信息与通信·通信
浪客川10 分钟前
【百例RUST - 005】所有权和切片
开发语言·后端·rust
古城小栈12 分钟前
Axum: Rust 好用的 Web 框架
开发语言·rust
_OP_CHEN13 分钟前
【算法基础篇】(四十四)数论之欧拉定理与扩展欧拉定理深度解析:从降幂到超大规模幂运算
c++·算法·蓝桥杯·算法竞赛·欧拉定理·扩展欧拉定理·acm/icpc
lfwh17 分钟前
Java 中基于 DBSCAN 算法的车辆交汇点计算实现详解
java·开发语言·算法
liulilittle18 分钟前
DeepWiki: OPENPPP2 工程价值
网络·c++·网络协议·ai·信息与通信·通信
数据大魔方19 分钟前
【期货量化入门】期权交易入门:从零开始学期权量化(TqSdk完整教程)
数据库·python·mysql·算法·区块链·程序员创富
星河耀银海21 分钟前
C++面向对象编程:从基础到实战
开发语言·c++
HUST27 分钟前
C语言第十一讲: 深入理解指针(1)
c语言·开发语言
独钓寒江雨30 分钟前
win11在安全模式下删除360tray.exe
windows·电脑