停止io_service对象并提升::asio::io_service::work

stopping an io_service object and boost::asio::io_service::work

本文关键字:service io asio work 对象 停止      更新时间:2023-10-16
boost::asio::io_service m_io_service;
boost::asio::io_service::work m_work(m_io_service);
m_io_service.run()
m_io_service.stop(); 
m_io_service.reset();
m_io_service.run(); //work object still used here or should I recreate a m_work object?

如果我停止io_service对象,然后重新启动它,我需要将它重新绑定到工作对象吗?

规范的方法是使用

optional<asio::io_service::work> m_work(asio::io_service::work(m_io_service));

shared_ptr<asio::io_service::work> m_work = make_shared<asio::io_service::work>(m_io_service);

因此,在这两种情况下,您都可以使用发出"关闭服务"的信号

m_work.reset();

而且,不,我认为你不需要重新绑定一个工作对象。工作对象不是实际的异步操作。它更像是一个refcount/lock