Приведен пример использования boost :: asio.Зачем нам нужно использовать boost :: asio :: io_service :: work?
- Почему этот пример использует boost :: asio :: io_service :: work?
- И почему
srv.run();
не вызывается для выполнения задач в потоках?
int main()
{
boost::asio::io_service srv;
boost::asio::io_service::work work(srv);
boost::thread_group thr_grp;
thr_grp.create_thread(boost::bind(&boost::asio::io_service::run, &srv));
thr_grp.create_thread(boost::bind(&boost::asio::io_service::run, &srv));
srv.post(boost::bind(f1, 123));
srv.post(boost::bind(f1, 321));
//sync
srv.post(boost::bind(f2, 456));
srv.post(boost::bind(f2, 654));
//sync
srv.stop();
thr_grp.join();
}
Update: В чем разница между опросом и бежать, когда io_service используются без io_service :: работы?
int main()
{
boost::asio::io_service srv;
//boost::asio::io_service::work work(srv);
std::vector<boost::thread> thr_grp;
srv.post(boost::bind(f1, 123));
srv.post(boost::bind(f1, 321));
//sync
srv.post(boost::bind(f2, 456));
srv.post(boost::bind(f2, 654));
//sync
// What is the difference between the poll and run, when io_service without work?
thr_grp.emplace_back(boost::bind(&boost::asio::io_service::poll, &srv));// poll or run?
thr_grp.emplace_back(boost::bind(&boost::asio::io_service::run, &srv));// poll or run?
srv.stop();
for(auto &i : thr_grp) i.join();
int b;
std::cin >> b;
return 0;
}
Спасибо! Но в чем разница между опросом и запуском, когда io_service используется без io_service :: work? Я добавил второй пример без работы. По внешнему поведению в этом случае они (опрос и прогон) работают на 100% одинаково? – Alex
Сэм Миллер имеет довольно хороший ответ на разницу между опросом и запуском в его ответе на этот вопрос [http://stackoverflow.com/questions/4705411/boostasio-io-service-run-vs-poll-or- как-ду-я-интеграция-boostasio-в-ма) –