Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan masa tamat untuk konsol.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!