我只是偶然发现了一个非常奇怪的问题。在我的代码中,我启动了一个线程来等待用户输入——以防用户想要中断主进程。在该线程运行之后,我尝试使用 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()
用 a 替换 while 循环sleep(10)
,则Py_Initialize()
返回正常,并且一切正常。为什么 IO 请求阻塞Py_Initialize()
?
谢谢!