908
Comment:
|
937
|
Deletions are marked like this. | Additions are marked like this. |
Line 5: | Line 5: |
import time | |
Line 18: | Line 19: |
event = self.eventChannel.waitEvent() | event = self.eventChannel.waitEvent() # blocking call |
Line 21: | Line 22: |
Line 22: | Line 24: |
eventHandler = eventHandler() |
eventHandler = EventHandler() |
I'd like to start this page off with a question. How do you kill one thread from within another? Here's some code that shows the problem:
import threading import time class Worker(threading.Thread): def __init__(self, eventChannel, eventHandler): self.eventChannel = eventChannel self.eventHandler = eventHandler self.stopFlag = 0 def shutdown(self): self.stopFlag = 1 def run(self): self.stopFlag = 0 while(!self.stopFlag): event = self.eventChannel.waitEvent() # blocking call self.eventHandler.dispatchEvent(event) eventChannel = EventChannel() eventHandler = EventHandler() worker = Worker(eventChannel, eventHandler) worker.run() time.sleep(20) worker.shutdown()
The problem here is that EventChannel.waitEvent() is a blocking operation. So if no event ever arrives, then our worker thread never stops. Suggestions? --ChrisSteinbach