Вы смешиваете асинхронные методы io_service::run
с синхронными методами deadline_timer::wait
.Это не будет работать.Либо используйте deadline_timer::async_wait
с io_service::run
, либо пропустите io_service::run
и просто используйте deadline_timer::wait
.Вам также не нужен поток для вызова io_service:run
, если вы идете по асинхронному маршруту, один поток будет работать нормально.Обе концепции подробно объясняются в разделе Базовые навыки учебного пособия Asio .
void print(const boost::system::error_code& /*e*/)
{
std::cout << "Hello, world!\n";
}
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(print);
io.run();
return 0;
}
Обратите внимание, что вам понадобится немного поработать для io_service
на обслуживание до вызова run()
.В этом примере async_wait
- это работа.
Потенциально не связана: 45 мс - это довольно маленькая дельта.По моему опыту, наименьшее время для любого обработчика, чтобы пройти через очередь реактора Asio epoll, составляет около 30 мс, это может быть значительно больше при более высоких нагрузках.Хотя все это в значительной степени зависит от вашего приложения.