Pourquoi avons-nous besoin d'utiliser boost :: asio :: io_service :: work?
Il est un exemple de l'utilisation de boost::asio.
- Pourquoi cet exemple utiliser le boost::asio::io_service::le travail ?
- Et pourquoi est -
srv.run ();
pas appelé à effectuer des tâches dans les filets?
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();
}
Mise à jour:
Quelle est la différence entre le sondage et courir, quand io_service est utilisé sans io_service::le travail?
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;
}
source d'informationauteur Alex
Vous devez vous connecter pour publier un commentaire.
Lorsque le io_service::run méthode est appelée sans un objet de travail, il sera de retour tout de suite. Généralement, ce n'est pas le comportement de la plupart des développeurs sont à la recherche pour. Il y a bien sûr quelques exceptions, mais la plupart des développeurs sont à la recherche pour spécifier un thread pour gérer le traitement asynchrone et ne veulent pas que le fil de sortie jusqu'a dit de le faire. C'est ce que votre exemple de code n'.
La io_service::run méthode est spécifiée en tant que délégué ou un pointeur de fonction dans le create_thread méthodes. Ainsi, lorsque le thread est créé à partir de la create_thread méthode il va appeler le io_service::run méthode et ça passe le io_service objet comme argument. En général un io_service objet peut être utilisé avec de multiples objets socket.
L'arrêt de la méthode est généralement appelée lorsque l'arrêt de l'application ou lors de la communication entre tous les clients/serveurs n'est plus nécessaire et il n'est pas prévu que toutes les nouvelles connexions devront être prises.