Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh melaksanakan input konsol tidak menyekat dalam C untuk aplikasi interaktif dan cekap?

Bagaimanakah saya boleh melaksanakan input konsol tidak menyekat dalam C untuk aplikasi interaktif dan cekap?

DDD
DDDasal
2024-10-29 19:50:03728semak imbas

How can I implement non-blocking console input in C   for interactive and efficient applications?

Input Konsol Tanpa Sekat dalam C : Penyelesaian Serbaguna

Dalam bidang pengaturcaraan C, keupayaan untuk mengendalikan konsol tanpa sekatan input adalah penting, terutamanya apabila mencipta aplikasi yang menuntut interaksi pengguna berterusan walaupun semasa melaksanakan tugas yang memakan masa. Artikel ini membentangkan penyelesaian komprehensif menggunakan teknik C moden dan perpustakaan luaran, memanfaatkan lesen permisif untuk fleksibiliti yang dipertingkatkan.

Pendekatan dan Pertimbangan

C menawarkan beberapa pendekatan untuk mencapai bukan -menyekat input konsol, masing-masing mempunyai kelebihan dan pertimbangan tersendiri:

  • Model Benang C 11: Pendekatan ini memanfaatkan perpustakaan std::thread dan std::depan untuk mencipta urutan berasingan yang mengendalikan input pengguna secara bebas daripada pelaksanaan program utama, membenarkan pemprosesan serentak.
  • Boost.Asio: Pustaka luaran ini menyediakan rangkaian yang berkuasa dan rangka kerja I/O peringkat rendah, termasuk ciri untuk input konsol tidak menyekat.
  • berlaku: Perpustakaan yang digunakan secara meluas yang mengkhusus dalam kawalan terminal dan pengendalian input, menawarkan set fungsi yang kaya untuk input konsol tanpa penyekat dan lanjutan pengurusan terminal.

Pilihan pendekatan bergantung pada keperluan dan keutamaan khusus pengaturcara. Untuk penyelesaian yang lebih ringkas dan mudah, model penjalinan C 11 ialah pilihan yang sesuai.

Contoh: Melaksanakan Input Konsol Tanpa Sekat dengan C 11

Kod berikut coretan menunjukkan input konsol tidak menyekat menggunakan model benang C 11:

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

static 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 contoh ini:

  • Fungsi getAnswer membaca input pengguna tanpa menyekat menggunakan std:: cin stream.
  • Urut utama mencipta utas berasingan menggunakan std::async untuk melaksanakan fungsi getAnswer.
  • Urut utama terus berjalan dan menggesa pengguna untuk input.
  • Jika pengguna memberikan input dalam masa 5 saat (dinyatakan oleh pembolehubah tamat masa), utas utama mendapatkan semula input dari masa hadapan dan mengeluarkannya. Jika tidak, nilai lalai "mungkin" digunakan.

Kesimpulan

Paradigma input konsol tidak menyekat memberi kuasa kepada pengaturcara C untuk membangunkan aplikasi interaktif yang mengendalikan dengan lancar arahan pengguna dan melaksanakan tugas latar belakang secara serentak. Pendekatan yang disediakan menawarkan pelbagai tahap kerumitan dan fungsi, membolehkan pengaturcara memilih penyelesaian yang paling sesuai dengan keperluan mereka.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan input konsol tidak menyekat dalam C untuk aplikasi interaktif dan cekap?. 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