3

無限ループで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」を受け入れないのはなぜですか。それを機能させる方法。

4

1 に答える 1

4

拡張コードで定期的にPyErr_CheckSignals()を呼び出し、次exit()が返される場合は呼び出す必要があります-1

   while (true) { //endless loop
       ++it;
       std::cout<< it <<std::endl;
       sleep(3);
       if(PyErr_CheckSignals() == -1) {
           exit(1);
       }
   }
于 2012-12-23T08:53:43.390 に答える