我正在实施一些使用升压asio操作, 我遇到了一个接口问题,我没有收到'处理程序'初始化,但之后,避免繁忙的循环与提升:: asio :: io_service运行
这迫使我写一个'忙'循环,我想要做的就是让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是(io_service对象::运行..)经营提升任务::线程)
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;
};
你的循环有一个小问题:['run']的文档(http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service/run/overload1 .html)指出,如果'run'返回,你必须调用['reset'](http://www.boost.org/doc/libs/1_55_0/doc/html/booster_asio/reference/io_service/reset.html)再次调用'run'之前。 –
我不想离开运行:),处理程序应该在开始后存在..但是,好的,我会查找它,仍然有什么办法来避免繁忙的循环? – Alon
几年前,我上次使用了Boost ASIO,现在我没有我的源代码,但是我记得我只是把'io_service.run()'调用放在它自己的线程中,并没有没有循环。我*认为*它是在任何异步调用之前完成的,无论如何它都能正常工作。 –