J'ai besoin de tous mes threads pour vérifier périodiquement qu'ils devraient toujours être en cours d'exécution, afin qu'ils puissent s'auto-terminer lorsque le programme se termine. Pour tous sauf un, il s'agit simplement de vérifier une variable d'état, mais le dernier est un thread d'interaction utilisateur, et sa boucle attend indéfiniment l'entrée de l'utilisateur, vérifiant seulement la variable d'état quand l'utilisateur entre une instruction . À ce stade, le programme échoue de toute façon puisque la classe ne peut pas fonctionner correctement lorsqu'elle n'est pas en cours d'exécution. Idéalement, cependant, j'aimerais ne pas en arriver là. Je pense que la meilleure solution, si possible, est un timeout sur getline, mais dans le cas où ce n'est pas possible ou une bonne option, je suis ouvert à toute option qui permettra au thread de se terminer soigneusement. En passant, je vois beaucoup de mentions de std :: getline. getline semble fonctionner que j'utilise l'espace de noms ou non. Est-ce un alias de l'autre, et lequel est le bon à utiliser?C++ timeout sur getline
Répondre
Il n'existe aucun moyen (standard) de définir un délai d'attente sur std::getline
. En particulier, la bibliothèque standard C++ ne connaît pas l'existence de threads
Pour répondre à votre deuxième question, la version conforme aux normes de std::getline
est celle de l'espace de noms.
Vous n'avez pas répondu à la deuxième question. ADL élimine souvent le besoin d'une qualification d'espace de nommage, mais vous utilisez seulement 'std :: getline' sur n'importe quelle implémentation moderne dont j'ai entendu parler. –
Probablement le moyen le plus facile pour vous de faire cela serait de faire tourner un autre thread, dans le seul but d'exécuter getline()
.
google renvoie this result, ce qui vous donne un exemple, bien qu'il dépende fortement de Win32. Cependant, vous devriez pouvoir le porter vers la bibliothèque de threads que vous utilisez.
Si vos threads n'ont aucun nettoyage à effectuer, une autre solution consisterait à appeler exit
lorsque vous souhaiterez terminer votre processus. exit
mettra fin à tous les threads et terminera le processus.
Vous avez besoin d'un autre thread pour signaler le thread utilisateur.
Comment cela va-t-il dépendre de la bibliothèque de threads que vous utilisez.
- 1. C#: Timeout sur SerialPort.Open?
- 2. C++ EOF Getline Erreur
- 3. Python équivalent de C++ getline()
- 4. getline en C++ - Besoin d'aide
- 5. getline sur le compilateur C écrasant MacOSX 10.6?
- 6. C++: getline() ignorant les premiers caractères
- 7. C# SMTPClient Timeout Question
- 8. C# NotifyIcon ShowBalloonTip timeout
- 9. webservice timeout C#
- 10. saute sur getline() sans prendre l'entrée d'utilisateur
- 11. Jquery timeout sur chaque
- 12. manutention SIGINT et getline
- 13. C# Socket.BeginSend AsyncCallback comportement (timeout?)
- 14. C++ natif WebBrowser timeout attraper
- 15. compiler le code C++ en utilisant gnu/c getline() sur mac osx?
- 16. std :: getline() renvoie
- 17. getline vs istream_iterator
- 18. Besoin d'aide avec getline()
- 19. Utilisation de plusieurs instances de getline en C++
- 20. Problème de boucle. Cin C++ getline clear buffer
- 21. Aide C++ avec la fonction getline avec ifstream
- 22. Caractère Getline et 16h (26d)
- 23. C# Web Web Call Call Timeout
- 24. C#: Téléchargement d'une URL avec timeout
- 25. C#: DBConnection.Open() timeout est trop long
- 26. Activator.CreateInstance timeout
- 27. Thread.Join sur plusieurs threads avec timeout
- 28. Httpwebreqest fonctionne avec Fiddler Sur sinon Timeout
- 29. PHP MySQLi timeout sur les tables verrouillées?
- 30. C# Formsauthentication timeout dans web.config annule le timeout de ticket manuel?
Quelle bibliothèque de threads utilisez-vous? –
En ce qui concerne votre question supplémentaire: Lisez la recherche dépendant de l'argument. – sbi