123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- from __future__ import print_function
- from avent import Avent, Abject, StopThread, handleMainEvents
- import threading, time, sys
- #
- # FIXME: Out of date!
- #
- class A1(Abject):
-
- def __init__(self):
- self.onWhat = Avent()
- self.onSomething = Avent()
-
- def dothings(self, sender, eargs):
- print("{}: doing things: {}".format(
- threading.currentThread().getName(),
- threading.currentThread() == self._thread))
-
- def dosomething(self, sender, eargs):
- print("{}: doing things: {}".format(
- threading.currentThread().getName(),
- threading.currentThread() == self._thread))
-
- def loop(self):
- print("{}: A1 looping".format(threading.currentThread().getName()))
-
- i = 0
- while True:
- if self.handleEvents(): break
-
- if i == 5:
- print("\n{}: (a1) on what => mainthing".format(
- threading.currentThread().getName()))
- self.onWhat.fire(self)
-
- if i == 8:
- print("\n{}: (a1) on something => (a3) do things".format(
- threading.currentThread().getName()))
- self.onSomething.fire(self)
-
- i += 1
- time.sleep(1)
- class A2(Abject):
- onThings = Avent()
- onOther = Avent()
- main_t = threading.currentThread()
- def mainthing(sender, eargs):
- global main_t
- print("{}: main thread: {}".format(
- threading.currentThread().getName(),
- threading.currentThread() == main_t))
- if __name__ == "__main__":
- # init
- a1 = A1()
- a2 = A2()
- a3 = A1()
- t1 = StopThread(target=a1.loop)
- t2 = StopThread(target=a3.loop)
-
- # connect events
- a2.onThings += a1.dothings
- a2.onOther += mainthing
- a1.onWhat += mainthing
- a1.onSomething += a3.dothings
-
- # start da threads
- t1.start()
- time.sleep(3)
- t2.start()
- time.sleep(1)
- print("---------")
-
- print("\n{}: on things => (a1) do things".format(
- threading.currentThread().getName()))
- a2.onThings.fire(a2)
- time.sleep(1)
-
- print("\n{}: on other => mainthing".format(
- threading.currentThread().getName()))
- a2.onOther.fire(a2)
-
- time.sleep(6)
-
- t2.stop()
- t1.stop()
-
- print("\n{}: main events should execute now..".format(
- threading.currentThread().getName()))
-
- # this blocks forever
- handleMainEvents()
-
- # this should never print
- print("\n----------\nend")
|