2016-04-17 34 views
9
ana

birlikte dişler sonlandırma Ben aşağıdaki iki konu:GObject.Mainloop()

myThread = threading.Thread(target=sender.mainloop.run, daemon=True) 
myThread.start() 

myThread2 = threading.Thread(target=receiver.mainloop.run, daemon=True) 
myThread2.start() 

hedefler GObject.Mainloop() yöntemleridir. Daha sonra ana programım sonsuz bir döngüde.

Benim sorunum, yürütme CTRL-C ile sonlandırıldığında, her iki iş parçacığı için Keyboardexception yükseltilir, ancak ana program sonlandırılmaz.

Herhangi bir fikir hem ana program hem de iki evre CTRL-C tarafından nasıl sonlandırılabilir?

cevap

5

ctrl-c, bir geri arama için ana iş parçacığınızda yakalayabileceğiniz bir SIGINT sinyali verir. Daha sonra geri aramada istediğiniz herhangi bir kapatma kodunu, belki de bir sender/receiver.mainloop.quit() veya bir şeyi çalıştırabilirsiniz.

import threading                          
import signal 
import sys 

def loop(): 
    while True: 
    pass 

def exit(signal, frame): 
    sys.exit(0) 

myThread = threading.Thread(target=loop) 
myThread.daemon = True 
myThread.start() 

myThread2 = threading.Thread(target=loop) 
myThread2.daemon = True 
myThread2.start() 

signal.signal(signal.SIGINT, exit) 

loop() 
+0

Teşekkürler dostum !!!! – Zorgmorduk