Je veux utiliser asio pour lire à partir d'un périphérique série et traiter les octets lorsqu'ils sont disponibles.Comment bloquer efficacement la lecture asio jusqu'à ce que les données soient disponibles sur le périphérique série?
Lors de l'utilisation async_read_until
mon rappel est appelé la plupart du temps en raison de l'erreur de fin de fichier (EOF). Je dois donc quitter le rappel et l'enregistrer à nouveau jusqu'à ce que les données soient disponibles. Il en résulte une boucle occupée, que je voudrais empêcher. Similaire arrive à read_until
qui revient immédiatement avec la même erreur EOF.
Pour POSIX, il est poll
d'attendre efficacement jusqu'à ce que les données soient disponibles sur un périphérique, mais je préfère utiliser des fonctions asio portables (y compris Windows) pour obtenir un effet similaire. Sur asio il y a asio::descriptor_base::bytes_readable
qui me permettrait de tester au préalable si les données sont disponibles, cependant je devrais tester ceci dans une boucle active pour bloquer jusqu'à ce que les données soient disponibles.
Existe-t-il un moyen pour asio d'appeler seulement un rappel asynchrone lorsque les données sont disponibles? Par exemple. puis-je masquer les erreurs dans async_read_until
de sorte que les rappels ne sont pas appelés sur ces erreurs?
Peut-être que vous cherchez http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/overview/core /reactor.html – sehe