Heim > Backend-Entwicklung > C++ > Wie implementiert man nicht blockierende Konsoleneingaben in C mithilfe von Parallelität?

Wie implementiert man nicht blockierende Konsoleneingaben in C mithilfe von Parallelität?

Barbara Streisand
Freigeben: 2024-10-29 17:04:02
Original
547 Leute haben es durchsucht

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

Nicht blockierende Konsoleneingabe in C

Eine häufige Anforderung bei der Programmierung ist die Verarbeitung von Benutzerbefehlen, während ein Programm kontinuierlich ausgeführt wird und Informationen ausgibt. Herkömmliche Konsoleneingabemethoden in C blockieren die Ausführung des Programms, bis der Benutzer die Eingabetaste drückt. Für eine nicht blockierende Eingabe benötigen Sie jedoch einen alternativen Ansatz.

Lösung: Parallelität

C 11 führt die Bibliotheken std::async und std::future für Parallelität ein. Dadurch können Sie einen separaten Thread für nicht blockierende Eingaben erstellen, ohne das Hauptprogramm anzuhalten.

Implementierung

Der bereitgestellte Code demonstriert nicht blockierende Konsoleneingaben:

<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>
Nach dem Login kopieren

In diesem Code:

  • getAnswer() ist die Funktion, die Benutzereingaben in einem separaten Thread liest.
  • Die std::async-Funktion startet getAnswer( ) in einem eigenen Thread.
  • Die Funktion „future.wait_for()“ prüft, ob getAnswer() in einem bestimmten Zeitrahmen (in diesem Fall 5 Sekunden) abgeschlossen wurde.
  • Wenn getAnswer() abgeschlossen ist, wird das Ergebnis in der Antwortvariablen gespeichert.
  • Das Programm läuft weiter und gibt Informationen aus, während der Benutzereingabe-Thread im Hintergrund arbeitet.

Das obige ist der detaillierte Inhalt vonWie implementiert man nicht blockierende Konsoleneingaben in C mithilfe von Parallelität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage