In your C++ you simply need to ensure that Python gets a regular chance to execute in any native loop you execute so it can do its housekeeping. One way is PyErr_CheckSignals(), but that won't do for long running loops, only short ones, because it doesn't do much housekeeping.
In my own code I simply called a small function every 1024 loop cycles which instantly returned e.g. if(!(idx++ & 1023)) call_my_null_python_function(); def my_null_python_function: pass This works very well indeed. Niall On 23 Dec 2012 at 17:02, simon zhang wrote: > This is the answer from the stackoverflow. > > while (true) { //endless loop > ++it; > std::cout<< it <<std::endl; > sleep(3); > if(PyErr_CheckSignals() == -1) { > exit(1); > } > } > > > 2012/12/23 Jaedyn K. Draper <jaedyn.cpp...@jaedyn.co> > > > Oh, my mistake. Not sure then, I've only embedded, never extended. Maybe > > someone else can help. :( > > > > > > On 12/23/2012 1:59 AM, simon zhang wrote: > > > > But I don't call Py_Initialize().I call C++ code in Python.Don't embed > > the Python to C++... > > > > 2012/12/23 Jaedyn K. Draper <jaedyn.cpp...@jaedyn.co> > > > >> Instead of Py_Initialize() (wherever it is you call it), try calling > >> Py_InitializeEx(0). Py_Initialize() (or Py_InitializeEx(1)) binds signal > >> handlers (including SIGINT) to send python exceptions instead of killing > >> the process. This may be what's hitting you. > >> > >> > >> On 12/23/2012 1:44 AM, simon zhang wrote: > >> > >> I have make a boost.python module with an endless loop.But I can't kill > >> the process by ctrl-c.The following is an example. > >> > >> 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() > >> > >> result: > >> > >> 1234..................... > >> > >> I can't kill the foreground process by Ctrl-c.why the module don't > >> accept signal "SIGINT" that was sent by Ctrl-c.How to make it work. > >> > >> > >> _______________________________________________ > >> Cplusplus-sig mailing > >> listCplusplus-sig@python.orghttp://mail.python.org/mailman/listinfo/cplusplus-sig > >> > >> > >> > >> _______________________________________________ > >> Cplusplus-sig mailing list > >> Cplusplus-sig@python.org > >> http://mail.python.org/mailman/listinfo/cplusplus-sig > >> > > > > > > > > _______________________________________________ > > Cplusplus-sig mailing > > listCplusplus-sig@python.orghttp://mail.python.org/mailman/listinfo/cplusplus-sig > > > > > > > > _______________________________________________ > > Cplusplus-sig mailing list > > Cplusplus-sig@python.org > > http://mail.python.org/mailman/listinfo/cplusplus-sig > > > -- Any opinions or advice expressed here do NOT reflect those of my employer Research In Motion Inc. Work Portfolio: http://careers.stackoverflow.com/nialldouglas/
SMime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig