使用C ++

时间:2016-01-12 09:50:51

标签: python c++ boost boost-python

我想从C ++创建一个Thread实例,target=entity传递给构造函数,其中entityboost::python::object,正如此Python代码所示:

pythread = Thread(target=entity)

我看到this SO post并提出了这段代码。它会在行object pythread = ...上抛出未处理的异常。我怎么能这样做?

void start(boost::python::object entity){
    using namespace boost::python;
    object main_module = import("__main__");
    object global = main_module.attr("__dict__");

    exec("from threading import Thread", global, global);

    dict kw;
    kw["target"] = entity.attr("start");

    object pythread = main_module.attr("Thread").attr("__init__"); //exception here

    PyObject* c_retval = PyObject_Call(pythread.ptr(), NULL, kw.ptr());

    object t = object(handle<>(c_retval));
    t.attr("start")();
}

编辑:由于Python的Thread对象被定义为Thread(group=None, target=None, ...),因此以下代码应该可以传递正确的参数:

object pythread = main_module.attr("Thread")(object(),entity.attr("start"));

但是,传递entity.attr("Start")会导致错误(没有to_python转换器)。这是另一个SO帖子的问题。

0 个答案:

没有答案