如何让一个线程杀死另一个?
这是一个示例代码,
1-开始t1
2 - 开始t2
3 - t2完成后。用t3杀死t1
有可能我完全困惑并且弄乱大时间。 :-) 请告知是否是这种情况,我应该遵循什么方法而不是我现在正在做什么。感谢。
import Tkinter
import ttk
import time
import threading
import sys
def task():
root = Tkinter.Tk()
ft = ttk.Frame()
ft.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
pb_hD.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD.start(10)
root.mainloop()
def destroy():
global t1
# here it should be something like t1.kill()
def process_of_unkown_duration():
time.sleep(5)
print 'Done'
def Main():
t1=threading.Thread(target=task,args=())
t2=threading.Thread(target=process_of_unkown_duration,args=())
t3=threading.Thread(target=destroy,args=())
t1.start()
t2.start()
t2.join()
t3.start()
if __name__ == '__main__':
Main()
答案 0 :(得分:3)
您甚至不需要创建三个甚至两个线程。只需在主线程中运行mainloop,并创建一个线程来执行杀死mainloop的后台任务,方法是将root
对象传递给后台线程,然后调用root.quit()
。
import Tkinter
import ttk
import time
import threading
import sys
def task(root):
ft = ttk.Frame()
ft.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
pb_hD.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
pb_hD.start(10)
root.mainloop()
def process_of_unkown_duration(root):
time.sleep(5)
print 'Done'
root.quit()
def Main():
root = Tkinter.Tk()
t1=threading.Thread(target=process_of_unkown_duration, args=(root,))
t1.start()
task(root) # This will block while the mainloop runs
t1.join()
if __name__ == '__main__':
Main()