Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan masa tamat untuk konsol.readline ()?

Bagaimana untuk melaksanakan masa tamat untuk konsol.readline ()?

Barbara Streisand
Barbara Streisandasal
2025-01-28 10:36:10658semak imbas

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

Menambah mekanisme tamat masa

Console.ReadLine() Aplikasi konsol memerlukan input pengguna untuk dijalankan, tetapi apa yang akan berlaku jika pengguna bertindak balas terlalu lama? Melaksanakan mekanisme masa yang membolehkan program anda terus melaksanakan walaupun pengguna tidak memberikan input dalam masa yang ditentukan.

kaedah pelaksanaan

Kaedah yang paling langsung adalah menggunakan kitaran sementara dengan pemasa untuk memeriksa input secara teratur. Sekiranya memerlukan masa tertentu tanpa input, program boleh membuang masa tamat.

Kaedah lanjutan menggunakan AutoresetEvent

<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>
Untuk mekanisme masa tamat yang lebih maju, kaedah multi -threading boleh digunakan. Pengawasan benang latar belakang mendengar input, dan benang utama digantung. Selepas menerima input, benang latar belakang menghantar isyarat untuk meneruskan benang utama.

Kedua -dua contoh ini menunjukkan cara menambah fungsi tamat untuk

. Kaedah yang mana untuk dipilih bergantung kepada keperluan dan toleransi khusus anda untuk kerumitan kod.
<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>

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan masa tamat untuk konsol.readline ()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn