系统相关
首页 > 系统相关> > 无法通过无限循环的boost.python模块中的Ctrl-c终止进程

无法通过无限循环的boost.python模块中的Ctrl-c终止进程

作者:互联网

我制作了一个带有无限循环的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);
}

Python:

import ctopy
ctopy.foo()

结果:

1
2
3
4
.....................

我无法通过Ctrl-c杀死前台进程.为什么模块不接受Ctrl-c发送的信号“ SIGINT”.如何使其工作.

解决方法:

您应该在扩展代码中定期调用PyErr_CheckSignals(),如果返回-1,则调用exit():

   while (true) { //endless loop
       ++it;
       std::cout<< it <<std::endl;
       sleep(3);
       if(PyErr_CheckSignals() == -1) {
           exit(1);
       }
   }

标签:boost-python,python,c-4
来源: https://codeday.me/bug/20191031/1976044.html