我正在實施一些使用升壓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()'調用放在它自己的線程中,並沒有沒有循環。我*認爲*它是在任何異步調用之前完成的,無論如何它都能正常工作。 –