2
J'utilise ce code à l'aide async_read_some
avec délaiboost délai ASIO async_read_some
readdata=0;
port_->async_read_some(boost::asio::buffer(vector),
boost::bind(readCallback));
//init async timer
boost::asio::deadline_timer timer(io);
timer.async_wait(boost::bind(timeoutHandler));
timer.expires_from_now(boost::posix_time::seconds(5));
io.reset();
do {
io.run_one();
}
while (readdata==0);
ici sont mes callbacks
void readCallback()
{
std::cout << "READ CALLBACK: "<<x<<std::endl;
readdata=1;
return;
}
void timeoutHandler()
{
std::cout << "TIMEOUT CALLBACK: "<<x<<std::endl;
readdata=1;
}
mon problème est que timeoutHandler est est exécutée instantanément et non au bout de 5 secondes
Il y a longtemps que j'ai utilisé asio mais que se passe-t-il lorsque vous supprimez 'io.reset()'? Cela peut entraîner la réinitialisation de 'async_wait' –
Comme dit @SteveVanOpstal, vous devriez supprimer' io.reset() '. Vous ajoutez des tâches au gestionnaire d'événement async (io_service), puis vous le réinitialisez immédiatement avant d'exécuter le service qui exécutera les événements que vous avez ajoutés (ce que vous faites avec 'run_one()'). Je vous recommande de lire et d'en apprendre plus sur 'io_service' et comment cela fonctionne. –
merci, j'ai essayé, mais avec le même résultat, 'timeoutHandler()' est appelé instantanément – user2071938