我已经制作了一个带有无限循环的boost.python模块。但是我不能通过ctrl-c来终止这个过程。以下是一个例子。
C ++
#include <boost/python.hpp>
#include <boost/python.module.hpp>
#include <boost/python.def.hpp>
#include <iostream>
usring namespace boost::python;
void foo() {
int it=0;
while (true) { //endless loop
++it;
std::cout<< it <<std::endl;
sleep(3);
}
}
BOOST_PYTHON_MODULE(ctopy)
{
def("foo",foo);
}
蟒:
import ctopy
ctopy.foo()
结果:
1
2
3
4
.....................
我无法通过Ctrl-c终止前台进程。为什么模块不接受信号&#34; SIGINT&#34;这是由Ctrl-c.How发送的,以使其工作。
答案 0 :(得分:4)
您应定期在扩展程序代码中致电PyErr_CheckSignals(),如果它返回exit()
则致电-1
:
while (true) { //endless loop
++it;
std::cout<< it <<std::endl;
sleep(3);
if(PyErr_CheckSignals() == -1) {
exit(1);
}
}