X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/samples/wxPIA_book/Chapter-18/worker_threads.py diff --git a/wxPython/samples/wxPIA_book/Chapter-18/worker_threads.py b/wxPython/samples/wxPIA_book/Chapter-18/worker_threads.py deleted file mode 100644 index 0ae091c3d0..0000000000 --- a/wxPython/samples/wxPIA_book/Chapter-18/worker_threads.py +++ /dev/null @@ -1,101 +0,0 @@ -import wx -import threading -import random - -class WorkerThread(threading.Thread): - """ - This just simulates some long-running task that periodically sends - a message to the GUI thread. - """ - def __init__(self, threadNum, window): - threading.Thread.__init__(self) - self.threadNum = threadNum - self.window = window - self.timeToQuit = threading.Event() - self.timeToQuit.clear() - self.messageCount = random.randint(10,20) - self.messageDelay = 0.1 + 2.0 * random.random() - - def stop(self): - self.timeToQuit.set() - - def run(self): - msg = "Thread %d iterating %d times with a delay of %1.4f\n" \ - % (self.threadNum, self.messageCount, self.messageDelay) - wx.CallAfter(self.window.LogMessage, msg) - - for i in range(1, self.messageCount+1): - self.timeToQuit.wait(self.messageDelay) - if self.timeToQuit.isSet(): - break - msg = "Message %d from thread %d\n" % (i, self.threadNum) - wx.CallAfter(self.window.LogMessage, msg) - else: - wx.CallAfter(self.window.ThreadFinished, self) - - - -class MyFrame(wx.Frame): - def __init__(self): - wx.Frame.__init__(self, None, title="Multi-threaded GUI") - self.threads = [] - self.count = 0 - - panel = wx.Panel(self) - startBtn = wx.Button(panel, -1, "Start a thread") - stopBtn = wx.Button(panel, -1, "Stop all threads") - self.tc = wx.StaticText(panel, -1, "Worker Threads: 00") - self.log = wx.TextCtrl(panel, -1, "", - style=wx.TE_RICH|wx.TE_MULTILINE) - - inner = wx.BoxSizer(wx.HORIZONTAL) - inner.Add(startBtn, 0, wx.RIGHT, 15) - inner.Add(stopBtn, 0, wx.RIGHT, 15) - inner.Add(self.tc, 0, wx.ALIGN_CENTER_VERTICAL) - main = wx.BoxSizer(wx.VERTICAL) - main.Add(inner, 0, wx.ALL, 5) - main.Add(self.log, 1, wx.EXPAND|wx.ALL, 5) - panel.SetSizer(main) - - self.Bind(wx.EVT_BUTTON, self.OnStartButton, startBtn) - self.Bind(wx.EVT_BUTTON, self.OnStopButton, stopBtn) - self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) - - self.UpdateCount() - - def OnStartButton(self, evt): - self.count += 1 - thread = WorkerThread(self.count, self) - self.threads.append(thread) - self.UpdateCount() - thread.start() - - def OnStopButton(self, evt): - self.StopThreads() - self.UpdateCount() - - def OnCloseWindow(self, evt): - self.StopThreads() - self.Destroy() - - def StopThreads(self): - while self.threads: - thread = self.threads[0] - thread.stop() - self.threads.remove(thread) - - def UpdateCount(self): - self.tc.SetLabel("Worker Threads: %d" % len(self.threads)) - - def LogMessage(self, msg): - self.log.AppendText(msg) - - def ThreadFinished(self, thread): - self.threads.remove(thread) - self.UpdateCount() - - -app = wx.PySimpleApp() -frm = MyFrame() -frm.Show() -app.MainLoop()