2016-04-17 9 views
9

I mają następujące dwie nici:Zakończenie GObject.Mainloop() podaje razem z główną

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

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

cele są GObject.Mainloop() Metody. Następnie mój główny program znajduje się w nieskończonej pętli.

Mój problem polega na tym, że po zakończeniu wykonywania przez CTRL-C, podniesiony zostaje wyjątek Klawiatura dla obu wątków, ale program główny nie kończy się.

Jakieś pomysły, w jaki sposób można przerwać program główny i dwa wątki za pomocą CTRL-C?

Odpowiedz

5

ctrl-c wydaje sygnał SIGINT, który można przechwycić w głównym wątku dla wywołania zwrotnego. Następnie możesz uruchomić dowolny kod zamknięcia, który chcesz w wywołaniu zwrotnym, być może sender/receiver.mainloop.quit() lub coś podobnego.

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

Dzięki mate !!!! – Zorgmorduk