Код: Выделить всё
class MyClass
{
private:
std::atomic running_;
std::thread worker_;
std::function m_op;
void printMessage()
{
std::string s = "hello";
while (running_)
{
s = m_op(s);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
public:
MyClass() : running_(false) {}
MyClass(const std::function& op) : running_(false), m_op(op) {}
void start()
{
if (!running_)
{
running_ = true;
worker_ = std::thread(&MyClass::printMessage, this);
}
}
void stop()
{
if (running_)
{
running_ = false;
worker_.join();
}
}
};
Код: Выделить всё
template
struct function_helper
{
function_helper(const boost::python::object& op) : m_op(op) {}
output_tp operator()(input_tps&&... args)
{
return boost::python::call(m_op.ptr(), std::forward(args)...);
}
private:
boost::python::object m_op;
};
boost::shared_ptr makeMakeClass(const boost::python::object& obj)
{
return boost::make_shared(function_helper(obj));
}
Код: Выделить всё
BOOST_PYTHON_MODULE(draft)
{
using namespace boost::python;
class_("MyClass")
.def("__init__", make_constructor(makeMakeClass))
.def("start", &MyClass::start)
.def("stop", &MyClass::stop);
}
При первом запуске происходит сбой, как показано в

Второй запуск не выбрасывает, но ничего не дает. Не могли бы вы помочь мне сделать эту работу?
Подробнее здесь: https://stackoverflow.com/questions/783 ... aded-class