Задался вопросом, а зачем в данном примере io_service в разных потоках...
#include <boost/asio/io_service.hpp>
#include <boost/asio/steady_timer.hpp>
#include <chrono>
#include <thread>
#include <iostream>
using namespace boost::asio;
int main()
{
io_service ioservice;
steady_timer timer1{ioservice, std::chrono::seconds{3}};
timer1.async_wait([](const boost::system::error_code &ec)
{ std::cout << "3 sec\n"; });
steady_timer timer2{ioservice, std::chrono::seconds{3}};
timer2.async_wait([](const boost::system::error_code &ec)
{ std::cout << "3 sec\n"; });
std::thread thread1{[&ioservice](){ ioservice.run(); }};
std::thread thread2{[&ioservice](){ ioservice.run(); }};
thread1.join();
thread2.join();
}
Попробовал просто io_service.run() и один раз в главном потоке - и так же все асинхронно вывелось... в чем профит?
Приципильно разницы нет, т.е. один из ioservice.run(); вы можете вызвать в отдельном потоке, а второй в главном. Но тогда вы блокируете главный поток. Если же оба ioservice.run(); вы вызываете в отдельных потоках, то в главном вы можете производить какую-то работу, а потом вставить на ожидание завершения.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости