QThread 监听端口,ternimate 之后仍锁定端口,对其进行解锁?

在Python多线程中,使用QThread监听串口遇到问题:使用`thread.terminate()`关闭子线程后,端口被锁定无法重新连接。尝试调用串口关闭方法引发句柄无效错误。解决方案可能涉及线程安全的串口资源管理和解锁机制。寻求关于QThread线程安全操作及串口重用的指导。
摘要由CSDN通过智能技术生成

程序中用到串口通信,因为想在主程序中通过判断之后关闭子线程的的串口实例A,然后在子线程中开启另一个串口实例B,我尝试了两种方式

1.使用 thread.terminate() 直接关闭子线程 —>我无法再次连接上这个端口a。

2.调用子线程中的 串口实例关闭方法  self.thread.mSerial.close()  会出现句柄无效

 

由于以上问题未解决,我最终换了一个方式达到我的目的:开启两个线程,分别监听端口a,b,不再关闭串口

 

如果有哪位路过的大神,有解决以上问题的方法,请点个评论指导一二!

 

 

以下为参考资料

1.使用terminate() 暴力结束的线程可能会用到互斥锁,使用QMutexLocker方法进行线程互斥,如果暴力结束,栈对象好像没有释放,导致QMutexLocker没有执行析构函数,导致没有解锁,产生死锁;使用lock和unlock方法进行上锁,如果不需要进行互斥的话,在线程结束后,或者线程开始前在其它线程判断是否已经上锁,初始化对其进行解锁也是ok的,但是不要进行多次解锁,会产生不可预估的问题。

2.问题描述:
在主线中开了一个子线程,并且子线程和主线程共享一个串口实例。我就让子线程向串口发送数据,结果就报错:serial.serialutil.SerialException: ClearCommError failed (OSError(9, '句柄无效。', None, 6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值