Я использую boost::asio::io_service
для обработки работы в Foo
. Теперь это работает нормально, пока я не выйду из ~Foo
и не найду где-нибудь в io_service
деструктор (в деструкторе service_registry). Я что-то не так?io_service висит на разрушении
struct Foo {
Foo();
~Foo();
void bar();
boost::asio::io_service _ioService;
unique_ptr<boost::asio::io_service::work> _ioWork;
thread _thread;
};
Foo::Foo() :
_ioWork(new boost::asio::io_service::work(_ioService)),
_thread([&]() {
_ioService.run();
}) {
}
Foo::~Foo() {
_ioWork.release();
_ioService.stop();
_thread.join();
// works great till here
}
void
Foo::bar() {
auto writer = []()
{
// Some magic code
};
_ioService.post(writer);
}
Я вроде удивления, почему _thread
не присоединится, когда я не называю stop
на _ioService
.
Прикрепите свой отладчик и узнайте, что блокирует ... –