2009-12-17 4 views
6

je suis après un meilleur exemple des boost::asio::deadline_timerMieux boost asio deadline_timer exemple

Les exemples donnés sera toujours temps et appeler la méthode close. J'ai essayé d'appeler cancel() sur une minuterie, mais cela provoque l'appel de la fonction en async_wait immédiatement.

Quelle est la manière correcte de travailler avec des minuteurs dans un client async tcp?

+1

il y a une raison derrière ce comportement. Chaque appel à async_wait est associé à un gestionnaire d'achèvement. L'annulation de l'appel n'affecte pas cela. –

Répondre

20

Vous indiquez qu'appeler cancel() sur une minuterie provoque l'appel immédiat de la fonction transmise à async_wait. C'est le comportement attendu, mais rappelez-vous que vous pouvez vérifier l'erreur transmise au gestionnaire de minuteur pour déterminer si le minuteur a été annulé. Si la minuterie a été annulée, operation_aborted est passé. Par exemple:

void handleTimer(const boost::system::error_code& error) { 
    if (error == boost::asio::error::operation_aborted) { 
     std::cout << "Timer was canceled" << std::endl; 
    } 
    else if (error) { 
     std::cout << "Timer error: " << error.message() << std::endl; 
    } 
} 

Espérons que cela aide. Si non, quel est l'exemple spécifique que vous recherchez?

+0

Est-ce que io_service.stop() annule la minuterie? –

Questions connexes