Wie führt man asynchrone Programmierung in C++-Code durch?
Im Bereich der Softwareentwicklung ist asynchrone Programmierung zu einer der notwendigen Fähigkeiten geworden. Es kann die Leistung von CPU-intensiven Vorgängen und E/A-intensiven Vorgängen besser ausgleichen, sodass Programmcode gleichzeitig oder parallel ausgeführt werden kann, wodurch die Reaktionsgeschwindigkeit und die Gesamtleistung des Programms verbessert werden. Derzeit ist die asynchrone Programmierung in vielen Plattformen und Programmiersprachen weit verbreitet. Die Sprache C++ ist eine Hochleistungsprogrammiersprache, und ihr asynchroner Programmiermodus wird auch in vielen Projekten häufig verwendet. In diesem Artikel wird die asynchrone Programmiermethode der C++-Sprache vorgestellt, in der Hoffnung, jedem dabei zu helfen, die asynchrone Programmierung zu beherrschen.
Asynchrone Programmiermethoden in C++11
Der C++11-Standard führt std::async für die asynchrone Programmierung ein. Die Funktion std::async wird verwendet, um einen neuen Thread zu starten und ein std::future-Objekt zurückzugeben, das das Ergebnis der asynchronen Berechnung darstellt. Die Funktion ist wie folgt definiert:
template< class Function, class... Args > future<typename result_of<Function(Args...)>::type> async( launch policy, Function&& f, Args&&... args );
Unter diesen ist die Parameterrichtlinie die Startstrategie. Die Optionen sind std::launch::async und std::launch::deferred. Ersteres bedeutet, die asynchrone Berechnung sofort zu starten Letzteres bedeutet, den Start der asynchronen Berechnung zu verzögern. Der Parameter f ist die auszuführende Funktion oder das Funktionsobjekt.
Der Beispielcode für die Verwendung von std::async für die asynchrone Programmierung lautet wie folgt:
#include <iostream> #include <future> #include <chrono> #include <thread> using namespace std; int async_func(int x, int y) { cout << "async_func start." << endl; std::this_thread::sleep_for(std::chrono::seconds(1)); cout << "async_func end." << endl; return x + y; } int main() { std::future<int> result = std::async(std::launch::async, async_func, 1, 2); cout << "main func start." << endl; std::this_thread::sleep_for(std::chrono::seconds(2)); cout << "main func end." << endl; int res = result.get(); cout << "result: " << res << endl; return 0; }
In diesem Code verwenden wir std::async, um einen asynchronen Berechnungsthread zu öffnen, die async_func-Funktion asynchron auszuführen und die Werte zu übergeben der Parameter x bzw. y Für 1 und 2 wird schließlich das Berechnungsergebnis zurückgegeben. Im Hauptthread machten wir zunächst eine Pause von 2 Sekunden und nachdem der asynchrone Berechnungsthread beendet war, erhielten wir die Berechnungsergebnisse und druckten sie aus.
Durch Ausführen des obigen Codes lautet das Ausgabeergebnis wie folgt:
async_func start. main func start. async_func end. main func end. result: 3
Aus dem Ausgabeergebnis ist ersichtlich, dass der Hauptthread während des asynchronen Berechnungsprozesses nicht blockiert, sondern weiterhin nachfolgenden Code ausführt. Darüber hinaus ist zu beachten, dass das Programm abstürzt, wenn das Programm während der asynchronen Berechnung eine Ausnahme auslöst und die Ausnahme nicht behandelt wird.
Asynchrone Timer-Programmiermethode in C++
Zusätzlich zur Verwendung von std::async für die asynchrone Programmierung bietet C++ auch einige andere asynchrone Programmiermethoden, z. B. die Verwendung des System-Timers für die asynchrone Programmierung. Ein Timer ist ein gängiger Mechanismus in Betriebssystemen, der dazu dient, in regelmäßigen Abständen ein Ereignis auszulösen oder eine Aufgabe auszuführen. In C++ können wir die zugehörigen Funktionen in den Bibliotheken std::chrono und std::thread verwenden, um asynchrone Timer-Programmierung zu implementieren, wie unten gezeigt:
#include <iostream> #include <chrono> #include <thread> void timer_func() { std::cout << "timer func called." << std::endl; } int main() { int delay_time = 200; std::chrono::milliseconds delay(delay_time); while(true) { std::cout << "wait for " << delay_time << " milliseconds." << std::endl; std::this_thread::sleep_for(delay); timer_func(); } return 0; }
In diesem Beispielprogramm verwenden wir die Funktion std::this_thread::sleep_for , simuliert eine Verzögerung von 20 Millisekunden, und nach Ende der Verzögerung wird die Funktion timer_func ausgelöst, wodurch eine asynchrone Programmierung des Timers realisiert wird. Durch Ausführen des obigen Codes kann die Wartezeit kontinuierlich im Terminal gedruckt werden und „Timer-Funktion aufgerufen“ wird regelmäßig ausgegeben.
Es ist zu beachten, dass die Genauigkeit und Leistung des Timers leicht durch verschiedene Faktoren beeinflusst werden kann, wie z. B. die Auslastung des Betriebssystems, die Genauigkeit der Systemzeit usw. Wenn in tatsächlichen Anwendungen bestimmte Echtzeitanforderungen vorliegen, müssen daher einige Optimierungen und Anpassungen vorgenommen werden.
Fazit
Asynchrone Programmierung ist zu einer der wesentlichen Fähigkeiten in der Softwareentwicklung geworden. In der Sprache C++ können wir Mechanismen wie std::async und System-Timer verwenden, um asynchrone Programmierung zu implementieren. Bei der tatsächlichen Programmierung kann die Verwendung der asynchronen Programmierung Multi-Core-CPUs besser nutzen, die Parallel- oder Parallelitätsleistung des Codes verbessern und die Antwortzeit des Codes verkürzen. In diesem Artikel werden nur die Grundkenntnisse der asynchronen Programmierung vorgestellt. Die eigentliche Anwendung muss mit Multithreading-Mechanismen, Thread-Synchronisationsmechanismen und anderen Technologien vervollständigt werden. Praktische Anwendungen erfordern ein tiefgreifendes Verständnis und die Beherrschung verwandter Technologien, um Programmfehler und Leistungsprobleme zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie führt man asynchrone Programmierung in C++-Code durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!