Puis-je créer un logiciel watchdog timer thread en C++ à l'aide de Boost Signals2 et Fils?
Je suis en cours d'exécution de la fonction Foo de quelqu'un d'autre de la bibliothèque dans un seul thread de l'application actuellement. La plupart du temps, je fais un appel à Toto et il est vraiment rapide, quelques fois, je fais un appel à Toto et cela prend une éternité. Je ne suis pas un homme patient, si Toto est va prendre une éternité, je veux arrêter l'exécution de Foo et ne pas l'appeler avec ces arguments.
Quelle est la meilleure façon d'appeler Foo de manière contrôlée (mon environnement actuel est POSIX/C++) que j'ai arrêter l'exécution après un certain nombre de secondes. J'ai l'impression que la bonne chose à faire ici est de créer un deuxième thread appeler Foo, alors que dans mon thread principal j'ai créer une fonction timer qui va finalement le signal de la deuxième thread si elle est à court de temps.
Est-il une autre, plus apt modèle (et la solution)? Si non, serait de Boost Signals2 bibliothèque et les Threads faire l'affaire?
OriginalL'auteur Aron Ahmadia | 2009-06-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appeler Foo sur un deuxième thread avec un délai d'attente. Par exemple:
timed_join
ne arrêter laFoo()
exécution du thread si le délai est atteint, comme je le pensais, Aron l'avait demandé. Au lieu de cela, l'appelant se borne à savoir que leFoo()
fil était encore en cours d'exécution lorsque le délai d'attente a été atteint.OriginalL'auteur Dani van der Meer
Vous pouvez utiliser la classe suivante:
Un exemple d'utilisation:
OriginalL'auteur
Vous pouvez également définir une alarme juste avant l'appel de cette fonction, et les captures SIGALRM.
OriginalL'auteur FreeMemory
Vlad, excellent post! Votre code compilé et fonctionne à merveille. J'ai mis en place un logiciel watchdog timer avec elle. J'ai fait quelques modifications:
Avec ces modifications appliquées:
OriginalL'auteur elgeeko