簡體   English   中英

無法在具有無限循環的boost.python模塊中通過Ctrl-c終止進程

[英]can't kill process by Ctrl-c in a boost.python module with an endless loop

我用一個無限循環制作了一個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終止前台進程。為什么模塊不接受Ctrl-c發送的信號“SIGINT”。如何使其工作。

你應該在你的擴展代碼中定期調用PyErr_CheckSignals()並調用exit()如果它返回-1

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM