首頁 > 後端開發 > C++ > 如何實現Console.Readline()的超時?

如何實現Console.Readline()的超時?

Barbara Streisand
發布: 2025-01-28 10:36:10
原創
650 人瀏覽過

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

Console.ReadLine() 添加超時機制

控制台應用程序需要用戶輸入才能運行,但如果用戶響應時間過長會發生什麼?實現超時機制允許您的程序即使用戶未在指定時間內提供輸入也能繼續執行。

實現方法

最直接的方法是使用帶有計時器的 while 循環來定期檢查輸入。如果在沒有輸入的情況下經過一定的時間,程序可以拋出超時異常。

<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>
登入後複製

使用 AutoResetEvent 的高級方法

對於更高級的超時機制,可以使用多線程方法。後台線程監聽輸入,而主線程暫停執行。收到輸入後,後台線程發出信號,讓主線程繼續執行。

<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>
登入後複製

這兩個例子都展示瞭如何為 Console.ReadLine() 添加超時功能,第一個例子更簡潔,第二個例子更健壯,適用於更複雜的場景。 選擇哪個方法取決於你的具體需求和對代碼複雜度的容忍度。

以上是如何實現Console.Readline()的超時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板