2016-04-17 13 views
9

I si considerano due fili:GObject.Mainloop() thread assieme principale

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

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

Gli obiettivi sono GObject.Mainloop() metodi. Successivamente il mio programma principale è in un ciclo infinito.

Il mio problema è che quando l'esecuzione viene terminata da CTRL-C, Keyboardexception viene sollevata per entrambi i thread, ma il programma principale non termina.

Qualche idea in che modo sia possibile terminare il programma principale e i due thread con CTRL-C?

risposta

5

ctrl-c emette un segnale SIGINT, che è possibile acquisire nel thread principale per una richiamata. È quindi possibile eseguire qualsiasi codice di arresto che si desidera nella richiamata, forse un sender/receiver.mainloop.quit() o qualcosa del genere.

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

Grazie amico !!!! – Zorgmorduk