Блокнот Jupyter Kernel умирает после запуска многопоточного классаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Блокнот Jupyter Kernel умирает после запуска многопоточного класса

Сообщение Anonymous »

Я использую Boost Python, чтобы предоставить функцию, которая содержит внутренний поток. В классе есть функции start и stop, которые управляют только внутренним циклом. Код MyClass:

Код: Выделить всё

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);
}
Я использую проект модуля в Jupyter, как показано ниже:
Изображение

При первом запуске происходит сбой, как показано в
Изображение

Второй запуск не выбрасывает, но ничего не дает. Не могли бы вы помочь мне сделать эту работу?

Подробнее здесь: https://stackoverflow.com/questions/783 ... aded-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»