Jack
Jack

Reputation: 65

An "On Stop" method for python Threads

Me and a friend are having a programming challenge to who can make a good VOS (Virtual Operating System) and currently mine is running custom programs from Threads within the program, I am using Tkinter currently so the separate Threads have their own self.master.mainloop(). I have all the Threads stored in a list but I was wondering whether I could call a function in the Thread which would call a subroutine in the program telling it to do self.master.destroy(). Is there any way to do this?

I would like something along the lines of

class ToBeThread():
    def __init__(self):
        self.master = Tk()
        self.master.mainloop()
    def on_stop(self, reason):
        self.master.destroy()

Then in my main class

 from threading import Thread
 thread = Thread(ToBeThread())
 thread.setDaemon(True)
 thread.on_stop += ToBeThread.on_stop # Similar to how it is done in c#
 thread.start()
 ...

 ...
 thread.stop() # This calls the functions related to the "on_stop"

Upvotes: 1

Views: 654

Answers (1)

Jack
Jack

Reputation: 65

I have found a way to do this, so for any wondering I did:

from threading import Thread

class MyThread(Thread):def __init__(self, method, delay=-1):
    Thread.__init__(self)
    self.method = method
    self._running = False
    self.delay = delay
    self.setDaemon(True)
def run(self):
    self._running = True
    while self._running == True:
        self.method()
        if self.delay != -1:
            time.sleep(self.delay)
def stop(self):
    self._running = False

This allows me to write pass a function in through the initialiser, and it will run it ever x seconds or as many times as possible until I do thread.stop()

Upvotes: 1

Related Questions