2016-04-17 15 views
9

I haben die folgenden zwei Themen:Terminate GObject.Mainloop() fädelt zusammen mit Haupt

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

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

Die Ziele sind GObject.Mainloop (Methoden). Danach ist mein Hauptprogramm in einer Endlosschleife.

Mein Problem ist, dass, wenn die Ausführung durch STRG-C beendet wird, Keyboardexception für beide Threads ausgelöst wird, aber das Hauptprogramm nicht beendet wird.

Irgendwelche Ideen, wie sowohl das Hauptprogramm als auch die beiden Threads durch CTRL-C beendet werden könnten?

Antwort

5

ctrl-c gibt ein SIGINT-Signal aus, das Sie in Ihrem Hauptthread für einen Rückruf erfassen können. Sie können dann den gewünschten Shutdown-Code im Callback ausführen, vielleicht eine sender/receiver.mainloop.quit() oder so.

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

Danke Kumpel !!!! – Zorgmorduk