Я выполняю некоторые операции asio с помощью boost, Я столкнулся с проблемой интерфейса, с которой я не получаю «обработчики» при инициализации, но сразу после,Избегайте цикла занятости с boost :: asio :: io_service run
Это заставляет меня писать цикл «занят», что бы я хотел сделать, это запустить 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' return, вы должны вызвать [' reset'] (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service/reset.html) перед вызовом 'run' снова. –
Я не хочу, чтобы когда-либо уходить с пути :), после запуска должны существовать обработчики, но все равно, я посмотрю, все-таки, каков способ избежать цикла занятости? – Alon
Это было пару лет назад, так как я в последний раз использовал Boost ASIO, и у меня нет моего источника, доступного прямо сейчас, но, как я помню, я просто поместил вызов 'io_service.run() в свой собственный поток и не сделал У меня есть петля. Я думаю, что это было сделано до того, как были сделаны какие-либо асинхронные вызовы, и все равно работало нормально. –