Maison > développement back-end > C++ > Comment implémenter un délai d'expiration pour console.readline ()?

Comment implémenter un délai d'expiration pour console.readline ()?

Barbara Streisand
Libérer: 2025-01-28 10:36:10
original
650 Les gens l'ont consulté

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

ajoutant un mécanisme de délai d'expiration

Console.ReadLine() L'application de console nécessite l'exécution de l'entrée de l'utilisateur, mais que se passera-t-il si l'utilisateur répond trop longtemps? La mise en œuvre du mécanisme Time -out permet à votre programme de continuer à s'exécuter même si l'utilisateur ne fournit pas d'entrée dans le délai spécifié.

Méthode d'implémentation

La méthode la plus directe consiste à utiliser le cycle while avec une minuterie pour vérifier régulièrement l'entrée. S'il faut un certain temps sans entrée, le programme peut rejeter le délai d'attente.

La méthode avancée d'utilisation de l'autoresevent

<code class="language-csharp">using System;
using System.Threading;

public class ConsoleTimeout
{
    public static string InputWithTimeout(int timeoutSeconds)
    {
        Console.WriteLine("请输入内容:");
        var timer = new Timer((_) =>
        {
            throw new TimeoutException("输入超时");
        }, null, timeoutSeconds * 1000, Timeout.Infinite);

        string input = Console.ReadLine();
        timer.Dispose();
        return input;
    }
}</code>
Copier après la connexion
Pour un mécanisme de délai d'expiration plus avancé, des méthodes multi-étanches peuvent être utilisées. La supervision du thread d'arrière-plan a écouté l'entrée et le thread principal a été suspendu. Après avoir reçu l'entrée, le thread d'arrière-plan envoie un signal pour continuer le thread principal.

Ces deux exemples montrent comment ajouter des fonctions de délai d'expiration à

. La méthode à choisir dépend de vos besoins spécifiques et de votre tolérance à la complexité du code.
<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("用户未在规定时间内提供输入。");
    }
}</code>
Copier après la connexion

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!

source:php.cn
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