Как избежать занятого цикла с помощью boost :: asio :: io_service run

Я реализую некоторые операции 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;
};

1

Решение

Вам нужно использовать io_service :: работа:

boost::asio::io_service        service;
boost::asio::io_service::work  work( service );

Заметка: в деструкторе work объект уведомляет service что работа завершена и io_service::run() может вернуться.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector