我正在使用boost实现一些asio操作, 我遇到了一个接口问题,我在初始化时没有收到“处理程序”,但是之后,
这迫使我写一个'忙'循环,我想做的是让io_service运行,即使没有至少一个处理程序,是否可能?处理这个的方法是什么?在服务上等待处理程序? 这是我的代码..
/** : */
void Run () { while(true) {m_srv.run(); Sleep(1);} } // once 1 handler is inside service, thread will not be in busy loop
private: // members:
io_service m_srv;
有什么建议吗?感谢
这是代码问题:(m_drv是一个运行boost :: thread(io_service :: run ..)的任务)
class App : public Base::Application
{
public:
/** : */
App(char* name, char* id) : Application(name, id), m_drv("NetTask"), m_worker("Worker"), m_acceptor(m_worker, Drv(), &OnAccept, 4567)
{
m_acceptor.Accept(Drv());
}
/** : */
inline DriverImp& Drv() { return static_cast<DriverImp&>(m_drv.Imp());}
/** : */
inline Reactor& Worker() { return m_worker; }
public:
APTR(Socket) m_sock;
private: // members:
Driver m_drv;
Reactor m_worker;
Acceptor m_acceptor;
};
答案 0 :(得分:5)
您需要使用io_service::work:
boost::asio::io_service service;
boost::asio::io_service::work work( service );
注意:在析构函数中,work
对象通知service
工作已完成,io_service::run()
可能会返回。