关闭循环线程使脚本冻结

2024-09-30 04:37:35 发布

您现在位置:Python中文网/ 问答频道 /正文

导言

我已经做了一些脚本,里面有线程,可以在一定时间内杀死exe。线程似乎工作正常,但当我要关闭脚本时,它冻结了。我的脚本有一个使用TKinter执行和退出的“按钮”

有问题的

脚本冻结,线程仍在后台运行。线程包含30-60秒的循环(杀死exe)。似乎脚本无法正常关闭,因为线程仍在继续

下面是线程类:

# Global Variable #
runBroke='taskkill /F /im RuntimeBroker.exe'

#Thread  Class #
    class Killizer(object):
        def __init__(self):
            self.thread1 = None
            self.stop_threads = Event()
    
        def killer(self):
            while not self.stop_threads.is_set():
                def kill():
                    os.system(runBroke)
                    timer()
                def timer():
                    time.sleep(60)
                    kill()
                kill()
    
        def exe(self):
            self.stop_threads.clear()
            self.thread1 = Thread(target = self.killer)
            self.thread1.start()
    
        def shut(self):
            self.stop_threads.set()
            self.thread1.join()
            self.thread1 = None

如何使用TKinter按钮正确关闭或强制退出该线程


Tags: self脚本nonetkinterdef线程按钮exe
2条回答

您可以使用after创建计时器来终止应用程序:

import time, os
import tkinter as tk

runBroke='taskkill /F /im RuntimeBroker.exe'

class KillingApp():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(self.root, text="")
        self.label.pack()
        self.kill()
        self.root.mainloop()

    def _kill(self):
        print("running: taskkill")
        os.system(runBroke)

    def kill(self):
        now = time.strftime("%H:%M:%S")
        self.label.configure(text="Last kill time: %s" % now)
        self._kill()
        # idle 5 seconds
        self.root.after(5000, self.kill)

app=KillingApp()

使用。。。最后

# Global Variable #
runBroke='taskkill /F /im RuntimeBroker.exe'

#Thread  Class #
    class Killizer(object):
        def __init__(self):
            self.thread1 = None
            self.stop_threads = Event()
    
        def killer(self):
            while not self.stop_threads.is_set():
                def kill():
                    os.system(runBroke)
                    timer()
                def timer():
                    time.sleep(60)
                    kill()
                kill()
    
        def exe(self):
            self.stop_threads.clear()
            self.thread1 = Thread(target = self.killer)
            self.thread1.start()
    
        def shut(self):
            self.stop_threads.set()
            self.thread1.join()
            self.thread1 = None

它会把它完全关闭

相关问题 更多 >

    热门问题