Jaedyn. I would like to discuss another issue, what is a good way to avoid deep copy.There may be a few big data.From c++ to python and from python to c++.Similar from c + + return std::string* to python and python pass the std::string* parameter to c + + function.Maybe it should be similar to smart pointers.Do you have any good suggestions in there?
2012/12/23 Jaedyn K. Draper <jaedyn.cpp...@jaedyn.co> > I was at least half right, then. Python was eating the signals. :) > > As an alternative, to prevent yourself from having to do this in every > loop in your code, you might try this on the python side: > > import signal > signal.signal(signal.SIGINT, signal.SIG_DFL) > > That'll stop Python from catching SIGINT globally and will always send the > SIGINT down to the C++ and terminate. > > Of course, that may or may not be an option depending on your specific > needs. > > > On 12/23/2012 3:02 AM, 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 >> > > > > _______________________________________________ > 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 list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig