本当に奇妙な問題に遭遇しました。私のコードでは、ユーザーがメイン プロセスを中断したい場合に備えて、ユーザー入力を待機するスレッドを 1 つ起動しています。そのスレッドが実行された後、python を使用していくつかの計算を実行しようとします。スレッドはgetchar()
-- を使用してユーザー入力を探します。入力がリターンの場合、ブール値フラグが設定され、メイン プロセスの実行を停止します。メイン プロセスはこのフラグをときどきチェックし、設定されている場合は適切なアクションを実行します。
概略的に:
bool volatile stopper = false;
thread stopThread(interrupt, &stopper);
while( !stopper ) {
/* ... stuff ... */
Py_Initialize(); // this doesn't return unless 'interrupt()' completes.
/* ... do things with python object ... */
}
割り込みメソッドは次のようになります。
void interrupt(bool *st) {
char ch;
while( ch != '\n' ) {
ch = getchar();
}
*st = true;
}
getchar()
while ループをに置き換えると、正常にsleep(10)
返さPy_Initialize()
れ、すべてがうまく機能します。IO リクエストがブロックされるのはなぜPy_Initialize()
ですか?
ありがとう!