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

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

Barbara Streisand
Lepaskan: 2025-01-28 10:36:10
asal
713 orang telah melayarinya

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

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;
    }
}
Salin selepas log masuk
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.
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("用户未在规定时间内提供输入。");
    }
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan