我们所知道的:
- 不带单次触发选项的QTimer将在特定间隔发出超时信号
- 超时将在发出时调用函数
- 互斥锁将锁定一个变量,使其不被另一个线程修改
我的问题是:
假设我有一个非常耗时的函数F1在一个线程中使用了一个变量a和一个互斥对象。并且,QTimer正在运行一个循环调用函数F2,该函数也在另一个线程中将a与互斥体一起使用。如果F1正在运行并且A被锁定,那么F2将等待A被解锁。当F1无限期运行时,QTimer会堆叠很多F2调用吗?
Pyqt似乎会处理它
class test_thread(QThread):
timer = QTimer()
def __init__(self, parent=None):
super().__init__(parent=parent)
self.timer.timeout.connect(self.start)
def run(self):
print("call")
global mutex
global n
mutex.lock()
n = n + 1
print(n)
mutex.unlock()
def process(self):
self.timer.start(1000)
class test_thread1(QThread):
def __init__(self, parent=None):
super().__init__(parent=parent)
def run(self):
global mutex
mutex.lock()
while True:
global n
n = n - 1
print(n)
time.sleep(1)
mutex.unlock()
测试了两种情况:
test_thread1无
time.sleep(1)
";呼叫";在test_thread中,永远不会打印,并且n正在倒计时。
带
time.sleep(1)
的test_thread1";呼叫";只出现过一次,n也在倒计时。