9

C 共有ライブラリ (動的ライブラリ) で実行されているループを呼び出すと、Python は KeyboardInterrupt を受信せず、CTRL+C に何も応答 (または処理) しません。

私は何をしますか?

4

3 に答える 3

4

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)
于 2013-01-11T07:21:59.210 に答える
1

C 内で、SIGINT のシグナル ハンドラーを宣言する必要があります。これは、できればプロジェクトです。

于 2013-01-11T04:30:11.430 に答える