if show: t = threading.Thread(target=self.__show_start) t.setDaemon(True) t.start() self.t = t else:#? current = threading.current_thread() if self.t and current != self.t: self.t.join()
时间: 2023-04-09 14:03:23 浏览: 76
这段代码是一个条件语句,如果条件为真(即show为真),则创建一个线程对象t,将其目标函数设为self.__show_start,将线程设置为守护线程,启动线程,并将线程对象赋值给self.t。如果条件为假,则不执行任何操作。
相关问题
t = threading.Thread(target=self._listener) t.setDaemon(True) t.start() 分析一下这段代码,当主线程停止后,子线程为什么不停止
这段代码创建了一个新的线程并在后台运行,当主线程停止时,子线程仍然在后台运行,因为将子线程设置为守护线程(daemon thread)。当所有非守护线程都停止时,程序才会退出,这意味着守护线程会随着主线程的退出而自动结束,而不需要显式地停止它们。因此,即使主线程停止,子线程仍然会继续运行,直到完成其任务或程序被强制终止。
self.bool = True self.label.destroy() self.cap = cv2.VideoCapture(0) t = threading.Thread(target=self.windows_display()) t.start() print("1") button_id.config(text='关闭摄像头', command=lambda: self.Cease_stop(button_id))为什么print(”1“)没有执行
在这段代码中,`t = threading.Thread(target=self.windows_display())`这一行中的`self.windows_display()`是直接调用了`windows_display()`函数,并且没有使用`args`参数进行传参。这会导致`target`参数中传入的不是一个函数,而是`windows_display()`函数的返回值。因此,线程启动时会直接执行`windows_display()`函数,而不是将它作为一个线程运行。这就导致了`windows_display()`函数一直运行,而`print("1")`无法执行。
要解决这个问题,可以将`t = threading.Thread(target=self.windows_display)`修改为`t = threading.Thread(target=self.windows_display)`,即不直接调用函数,而是将函数名作为参数传入。同时,需要将`self.windows_display()`中的`while`循环改为`if`语句或者其他控制循环运行的方法,以保证线程能够正常启动和结束。
阅读全文