2016-04-17 7 views
9

के साथ एक साथ धागे मैं निम्नलिखित दो धागे:बर्खास्त GObject.Mainloop() मुख्य

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

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

लक्ष्य GObject.Mainloop() तरीके हैं। बाद में मेरा मुख्य कार्यक्रम अनंत लूप में है।

मेरी समस्या यह है कि जब निष्पादन CTRL-C द्वारा समाप्त किया जाता है, तो दोनों धागे के लिए कीबोर्ड अपवाद उठाया जाता है, लेकिन मुख्य प्रोग्राम समाप्त नहीं होता है।

कोई विचार सीटीआरएल-सी द्वारा मुख्य कार्यक्रम और दो धागे दोनों को कैसे समाप्त किया जा सकता है?

उत्तर

5

ctrl-c एक सिगिनट सिग्नल जारी करता है, जिसे आप कॉलबैक के लिए अपने मुख्य थ्रेड में कैप्चर कर सकते हैं। फिर आप कॉलबैक में जो शटडाउन कोड चाहते हैं उसे चला सकते हैं, शायद sender/receiver.mainloop.quit() या कुछ।

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

धन्यवाद दोस्त !!!! – Zorgmorduk

संबंधित मुद्दे