Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Input Konsol Tidak Menyekat dalam C Menggunakan Concurrency?

Bagaimana untuk Melaksanakan Input Konsol Tidak Menyekat dalam C Menggunakan Concurrency?

Barbara Streisand
Barbara Streisandasal
2024-10-29 17:04:02558semak imbas

How to Implement Non-Blocking Console Input in C   Using Concurrency?

Input Konsol Tidak Menyekat dalam C

Keperluan biasa dalam pengaturcaraan ialah mengendalikan arahan pengguna sementara program terus berjalan dan mengeluarkan maklumat. Kaedah input konsol tradisional dalam C menyekat pelaksanaan program sehingga pengguna menekan enter, tetapi untuk input tidak menyekat, anda memerlukan pendekatan alternatif.

Penyelesaian: Concurrency

C 11 memperkenalkan perpustakaan std::async dan std::future untuk concurrency. Ini membolehkan anda menghasilkan urutan berasingan untuk input tidak menyekat tanpa menghentikan program utama.

Pelaksanaan

Kod yang disediakan menunjukkan input konsol tidak menyekat:

<code class="cpp">#include <iostream>
#include <future>
#include <thread>
#include <chrono>

std::string getAnswer()
{
    std::string answer;
    std::cin >> answer;
    return answer;
}

int main()
{
    std::chrono::seconds timeout(5);
    std::cout << "Do you even lift?" << std::endl << std::flush;
    std::string answer = "maybe"; //default to maybe
    std::future<std::string> future = std::async(getAnswer);
    if (future.wait_for(timeout) == std::future_status::ready)
        answer = future.get();

    std::cout << "the answer was: " << answer << std::endl;
    exit(0);
}</code>

Dalam kod ini:

  • getAnswer() ialah fungsi yang membaca input pengguna dalam urutan yang berasingan.
  • Fungsi std::async melancarkan getAnswer( ) dalam urutannya sendiri.
  • Fungsi future.wait_for() menyemak sama ada getAnswer() telah selesai dalam jangka masa tertentu (dalam kes ini, 5 saat).
  • Jika getAnswer() telah selesai, keputusannya disimpan dalam pembolehubah jawapan.
  • Atur cara terus berjalan dan mengeluarkan maklumat semasa urutan input pengguna beroperasi di latar belakang.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Input Konsol Tidak Menyekat dalam C Menggunakan Concurrency?. 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