Maison > développement back-end > C++ > Comment implémenter un délai d'expiration pour console.readline () avec des fonctionnalités préservées?

Comment implémenter un délai d'expiration pour console.readline () avec des fonctionnalités préservées?

Mary-Kate Olsen
Libérer: 2025-01-28 10:41:08
original
586 Les gens l'ont consulté

How to Implement a Timeout for Console.ReadLine() with Preserved Functionality?

Implémentation de délais d'expiration pour console.readline () en C #

Les applications de console

s'appuient fréquemment sur Console.ReadLine() pour l'entrée utilisateur. Cependant, des situations surviennent lorsqu'un délai de réponse est nécessaire pour empêcher le programme indéfini se bloque.

Approches existantes et leurs limites

Diverses solutions existent, mais beaucoup échouent:

  • Perte de fonctionnalité: Alternatives à Console.ReadLine() manquent souvent de fonctionnalités cruciales comme le support de clés de retour, de suppression et de flèche.
  • Problèmes multi-appels: Les appels répétés peuvent entraîner des comportements ou des problèmes de filetage imprévisibles.
  • INEFFICANCE-AMÉRIEUR BESTANT: Les implémentations de délai d'attente simple utilisent souvent des boucles d'assistance occupée à forte intensité de ressources.

Une solution supérieure: la classe Reader

Cette approche améliorée évite l'attention occupée pour un mécanisme de délai d'expiration plus efficace et fiable. Une classe personnalisée Reader utilise un thread d'arrière-plan pour gérer les entrées, offrant ces méthodes:

  • Reader.ReadLine(int timeoutMillisecs = Timeout.Infinite): lit une ligne avec un délai d'attente facultatif. Si timeoutMillisecs est omis, il attend indéfiniment.
  • Reader.TryReadLine(out string line, int timeoutMillisecs = Timeout.Infinite): similaire à ReadLine, mais renvoie true sur la saisie réussie dans le délai d'expiration, false sinon. L'entrée est disponible dans le paramètre line en cas de succès.

Exemple d'utilisation

pour utiliser cette solution:

  1. Instancier la classe Reader.
  2. Utiliser Reader.ReadLine() ou Reader.TryReadLine() avec votre délai d'attente souhaité (en millisecondes).
  3. Manipter TimeoutException Si Reader.ReadLine() fois out.
  4. Vérifiez la valeur de retour de Reader.TryReadLine() et accédez à l'entrée via le paramètre out.

Avantages de cette approche

Cette méthode offre plusieurs avantages clés:

  • Fonctionnalité préservée: conserve toutes les caractéristiques de Console.ReadLine(), y compris la manipulation spéciale des clés.
  • Comportement multi-appel fiable: gère les appels de manière cohérente, n'assurant qu'une seule demande d'entrée active.
  • Utilisation efficace des ressources: Évite le gaspillage d'attente occupée.
  • Réactivité: Le programme reste réactif même si l'utilisateur ne fournit pas de contribution dans le délai d'attente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal