2010-07-07 6 views
1

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

+0

Quelle bibliothèque de threads utilisez-vous? –

+0

En ce qui concerne votre question supplémentaire: Lisez la recherche dépendant de l'argument. – sbi

Répondre

1

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.

+0

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. –

0

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.

0

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.

0

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.