Je m'attendais au code ci-dessous pour imprimer Bonjour, World! Toutes les 5 secondes, mais ce qui se passe est que le programme fait une pause pendant 5 secondes, puis imprime le message encore et encore sans pause ultérieure. Qu'est-ce que je manque? EDIT Pour ajouter du code de travail ci-dessous. Merci gars. p>
3 Réponses :
Si vous regardez le code d'erreur, vous obtenez une opération d'utilisation des erreurs annulées. P>
Hmm, c'est intéressant et merci de pointer cela. Pourquoi supposez-vous que je reçoive des erreurs annulées?
Découvrez la réponse de Interjay. Qui fixe complètement le problème.
Vous créez le Utilisation d'un seul objet de minuterie, stocké dans un membre ou une variable globale, devrait résoudre ce problème. P> mortsline_timer code> en tant que variable locale, puis en sortant immédiatement la fonction. Cela provoque la détruite et l'annulation de la minuterie et appelle votre fonction avec un code d'erreur que vous ignorez, causant la boucle infinie. P>
#include <iostream> #include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::asio; using namespace std; io_service io; deadline_timer t(io, boost::posix_time::seconds(5)); void print(const boost::system::error_code& /*e*/) { cout << "Hello, world!\n"; t.expires_from_now(boost::posix_time::seconds(5)); t.async_wait(print); } int main() { //deadline_timer t(io, boost::posix_time::seconds(5)); t.async_wait(print); io.run(); return 0; }
Soin pour ajouter une sorte de commentaires? Avoir une réponse que seuls le code aide rarement réellement l'orchestre de la question.
Qu'est-ce que
Canceldeadline code> est pour? J'ai commenté cette classe et
CD-CDR (D); Boost :: thread thr1 (CD); code> et le code fonctionne toujours.
Vous êtes peut-être intéressé par cette question: Stackoverflow.com/questions/21771639/...