Maison >développement back-end >C++ >Comment puis-je ajouter un délai d'attente à console.readline ()?

Comment puis-je ajouter un délai d'attente à console.readline ()?

Barbara Streisand
Barbara Streisandoriginal
2025-01-28 10:51:10959parcourir

How Can I Add a Timeout to Console.ReadLine()?

Entrez le mécanisme de délai d'expiration pour entrer dans la console

Description du problème

Les applications de console utilisent souvent des méthodes

pour indiquer l'entrée utilisateur. Cependant, en particulier dans les scénarios d'automatisation, il peut être nécessaire de restreindre le temps de réponse de l'utilisateur. Cela conduit à une question: comment gérer cette situation à

Add Timeout Mécanisme? Console.ReadLine() Console.ReadLine() La solution complète

Bien qu'il puisse y avoir certaines limites dans les solutions précédentes, comme s'appuyant sur des fonctions alternatives, un comportement anormal ou une attente intensive des ressources lorsque plusieurs appels, cette solution avancée résout efficacement ces problèmes:

Les avantages de cette solution

<code class="language-csharp">class Reader
{
    private static Thread inputThread;
    private static AutoResetEvent getInput, gotInput;
    private static string input;

    static Reader()
    {
        getInput = new AutoResetEvent(false);
        gotInput = new AutoResetEvent(false);
        inputThread = new Thread(reader);
        inputThread.IsBackground = true;
        inputThread.Start();
    }

    private static void reader()
    {
        while (true)
        {
            getInput.WaitOne();
            input = Console.ReadLine();
            gotInput.Set();
        }
    }

    public static string ReadLine(int timeOutMillisecs = Timeout.Infinite)
    {
        getInput.Set();
        bool success = gotInput.WaitOne(timeOutMillisecs);
        if (success)
            return input;
        else
            throw new TimeoutException("用户未在规定时间内提供输入。");
    }

    public static bool TryReadLine(out string result, int timeOutMillisecs = Timeout.Infinite)
    {
        getInput.Set();
        bool success = gotInput.WaitOne(timeOutMillisecs);
        if (success)
        {
            result = input;
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }
}</code>

Fonction de réserve: Différente des autres méthodes.

    Gestion des appels multiples:
  • Il garantit que les appels continus peuvent s'exécuter normalement sans générer plusieurs threads ou verrous morts. Éliminer l'attente occupée: Console.ReadLine() Cette solution utilise multi-thread pour éviter les déchets et l'attente de ressources connexes.
  • Exemple d'utilisation
  • Afin d'expliquer son utilisation, veuillez considérer l'exemple suivant:
  • ou, vous pouvez utiliser la méthode
avec les paramètres de sortie:

Conclusion

Cette solution avancée fournit une méthode complète et efficace pour ajouter un mécanisme de délai d'expiration à
<code class="language-csharp">try
{
    Console.WriteLine("请在接下来的 5 秒内输入您的姓名。");
    string name = Reader.ReadLine(5000);
    Console.WriteLine("您好,{0}!", name);
}
catch (TimeoutException)
{
    Console.WriteLine("抱歉,您等待的时间过长。");
}</code>
pour gérer efficacement les scénarios d'entrée utilisateur avec un délai spécifié.

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:
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