C 共有ライブラリ (動的ライブラリ) で実行されているループを呼び出すと、Python は KeyboardInterrupt を受信せず、CTRL+C に何も応答 (または処理) しません。
私は何をしますか?
C 共有ライブラリ (動的ライブラリ) で実行されているループを呼び出すと、Python は KeyboardInterrupt を受信せず、CTRL+C に何も応答 (または処理) しません。
私は何をしますか?
PyDLL
またはを使用しない限りPYFUNCTYPE
; GIL は ctypes 呼び出し中に解放されます。KeyboardInterrupt
したがって、 C コードが独自のシグナル ハンドラーをインストールしない場合、Python インタープリターはメイン スレッドで発生させることによって SIGINT を処理する必要があります。
Python コードをメイン スレッドで実行できるようにします。ctypes 呼び出しをバックグラウンド スレッドに入れることができます。
import threading
t = threading.Thread(target=ctypes_call, args=[arg1, arg2, ...])
t.daemon = True
t.start()
while t.is_alive(): # wait for the thread to exit
t.join(.1)
C 内で、SIGINT のシグナル ハンドラーを宣言する必要があります。これは、できればプロジェクトです。