Il y a un aspect des minuteurs dans les connexions asynchrones que je veux savoir si je comprends bien. Supposons que nous définissions une minuterie avant d'effectuer une opération de lecture, qui inclut un gestionnaire, puis run()
le service io_0.Quelques éclaircissements nécessaires abous Boost asio opérations asynchrones et minuteries
Comme je l'ai compris, le io_service se termine dès que le gestionnaire se termine après avoir été invoqué, qui peut se produire pour deux raisons:
a) l'opération de lecture est terminée. B) le temporisateur a atteint sa limite. Supposons que la première condition (a) ait été atteinte et que l'opération de lecture ait été achevée avant la fin de la temporisation.
La question est: Qu'advient-il de cette minuterie? Avons-nous besoin de le finir. Dites
dTimer_.expires_from_now (boost::posix_time::seconds(0));
after the io_service.run()?
Pouvez-vous le réinitialiser à un nouvel intervalle si nécessaire réutiliser le même objet temporisateur pour une autre opération de lecture? Puis-je réinitialiser() le service IO et réutiliser le même objet dans un nouveau run()
pour cette nouvelle opération?
réponse complète, + 1 pour boost :: asio :: error :: operation_aborted – Ralf
Merci beaucoup pour votre explication claire et nette du processus en cause, mais encore une question: en supposant que mon premier scénario, s'il est une opération de lecture et une minuterie, le io_service se termine-t-il lorsque le premier est terminé? l'ancien? ou les deux? –
@Old newbie 'io_service :: run()' retourne le contrôle à l'appelant quand il n'y a plus de travail à faire, cela est bien décrit dans la [documentation] (http://www.boost.org/doc/libs/1_46_0 /doc/html/boost_asio/reference/io_service/run/overload1.html). Dans votre contexte, cela signifie que tous les gestionnaires en attente, 'async_read' et' async_wait', seront invoqués avant d'être renvoyés. –