与 main 一起终止 GObject.Mainloop() 线程
Terminate GObject.Mainloop() threads together with main
我有以下两个线程:
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 终止时,两个线程都引发了键盘异常,但主程序没有终止。
知道如何通过 CTRL-C 终止主程序和两个线程吗?
ctrl-c 发出一个 SIGINT 信号,您可以在主线程中捕获该信号以进行回调。然后你可以 运行 在回调中你想要的任何关闭代码,也许是 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()
我有以下两个线程:
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 终止时,两个线程都引发了键盘异常,但主程序没有终止。
知道如何通过 CTRL-C 终止主程序和两个线程吗?
ctrl-c 发出一个 SIGINT 信号,您可以在主线程中捕获该信号以进行回调。然后你可以 运行 在回调中你想要的任何关闭代码,也许是 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()