Pyqt5中关于QMutex的问题

这是子线程的启动部分,第一次启动的时候2个qmutex的lock是成功的,顺利进行了下面的启动

        if channel_num in range(1, 7):
            self.dac_dict['channel_num'] = channel_num
            self.dac_dict['h_or_l'] = 1
            self.dac_dict['lcc_flag'] = 0
            self.dac_dict['fluke_flag'] = 0
            if self.dac_dict['lock'] == 0:
                lcc_lock1.lock()
                fluke_lock1.lock()
            self.my_lcc_send_work.is_run = True
            self.my_lcc_send_thread.start()
            self.my_lcc_receive_work.is_run = True
            self.my_lcc_receive_thread.start()
            self.my_fluke_send_work.is_run = True
            self.my_fluke_send_thread.start()
            self.my_fluke_receive_work.is_run = True
            self.my_fluke_receive_thread.start()
            self.dac_dict['lock'] += 1

但是在线程退出之后,第二次启动的时候,线程就很奇怪的启动不了,在debug模式下发现是qmutex的lock失败了。但是在线程第一次退出的代码中,尝试去对qmutex lock又是成功的。

        if self.dac_dict['lcc_flag'] == 0xff and self.dac_dict['fluke_flag'] == 0xff:
            self.my_lcc_send_work.is_run = False
            self.my_lcc_receive_work.is_run = False
            # lcc_lock1.lock()
            # lcc_lock2.unlock()
            self.my_lcc_send_thread.quit()
            self.my_lcc_receive_thread.quit()
            self.my_lcc_send_thread.wait()
            self.my_lcc_receive_thread.wait()
            self.my_fluke_send_work.is_run = False
            self.my_fluke_receive_work.is_run = False
            # fluke_lock1.lock()
            # fluke_lock2.unlock()
            self.my_fluke_send_thread.quit()
            self.my_fluke_receive_thread.quit()
            self.my_fluke_send_thread.wait()
            self.my_fluke_receive_thread.wait()

这个qmutex的问题没有搞明白,准备试试qwaitcondition。
在两个线程的work函数中print了一番,因为我的程序中,线程最后是在lcc_receive这个信号关联的槽中退出的,因此lcc2_lock已经unlock,那么lcc1_lock就一定是lock的。那么再次启动线程,自然就出错了,原因就在这里。

PyQt5.QtCore是Python的一个模块,它提供了许多与Qt核心功能相关的类和方法。以下是一些PyQt5.QtCore常用的功能: 1. 信号与槽机制:PyQt5.QtCore的QObject类提供了信号与槽机制,用于实现对象之间的通信。信号是一种特殊的函数,当特定事件发生时会被发射,而槽是与信号关联的函数,会在信号发射时被调用。 2. 定时器:PyQt5.QtCore的QTimer类用于实现定时器功能。它可以定时触发特定的事件,比如在一定时间间隔内执行某个函数。 3. 对象模型:PyQt5.QtCore的QObject类是所有Qt对象的基类。它提供了对象的属性、信号与槽等功能,是Qt框架重要的基础。 4. 事件处理:PyQt5.QtCore的QEvent类和QEventLoop类用于处理事件。事件是指用户与应用程序之间的交互,比如鼠标点击、键盘输入等。通过重写相应的事件处理函数,可以实现对事件的响应。 5. 多线程支持:PyQt5.QtCore的QThread类和QMutex类等提供了多线程编程的支持。多线程能够提高程序的性能和响应速度,通过合理地使用多线程,可以使应用程序更加流畅和高效。 6. 文件和IO操作:PyQt5.QtCore的QFile类和QIODevice类等用于文件和IO操作。它们提供了读写文件、网络通信等功能,方便进行数据的读取和存储。 总之,PyQt5.QtCore是PyQt5的核心模块,提供了许多与Qt核心功能相关的类和方法,方便开发者进行GUI应用程序的开发和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值