C++ ist eine beliebte Programmiersprache, die in verschiedenen Arten von Anwendungen weit verbreitet ist, insbesondere in solchen, die komplexer arbeiten oder hohe Anforderungen an die Systemressourcen stellen. Daher sind asynchrone Programmierkenntnisse in den letzten Jahren in der C++-Entwicklung immer wichtiger geworden. In diesem Artikel werden wir untersuchen, wie man C++ für die asynchrone Programmierung verwendet.
Hintergrund der asynchronen Programmierung
Bei einigen mühsamen und zeitaufwändigen Aufgaben kann das synchrone Programmiermodell die Anforderungen nicht erfüllen. Das Betriebssystem versetzt diese Aufgaben häufig in den asynchronen Modus, um Systemressourcen effizienter zu nutzen. Mit dem asynchronen Programmiermodell kann ein Programm mehrere Aufgaben parallel ausführen, ohne auf den Abschluss der vorherigen Aufgabe warten zu müssen. Dies trägt dazu bei, die Gesamtleistung des Programms zu verbessern.
Tipps zur asynchronen Programmierung
Bei der asynchronen Programmierung in C++ müssen wir eine asynchrone Bibliothek verwenden. Darunter umfasst der C++11-Standard eine asynchrone Bibliothek, std::async, die Funktionen in anderen Threads als dem Hauptthread ausführen kann. Der spezifische Prozess zur Verwendung der Funktion std::async ist wie folgt:
1 Erstellen Sie eine asynchrone Aufgabe: std::future-Objekt.
2. Um eine Funktion in einer asynchronen Aufgabe auszuführen, verwenden Sie die Funktion std::async, um die Funktion und die Parameter anzugeben.
3. Führen Sie andere Aufgaben im Hauptthread aus und warten Sie, bis die asynchrone Aufgabe abgeschlossen ist, bevor Sie die Ergebnisse erhalten.
Das Folgende ist ein Beispielcode:
//Header-Datei einschließen
//Asynchrone Aufgabe
int foo(int x) {
return x * x;
}
//Hauptfunktion
int main() {
//创建异步任务 std::future<int> result = std::async(foo,2); //在此期间执行其他任务 std::cout << "Main Task Finished" << std::endl; //等待异步任务完成 int r = result.get(); //输出异步任务结果 std::cout << "Result is " << r << std::endl;
}
Es ist zu beachten, dass der Hauptthread blockiert wird, wenn auf den Abschluss der asynchronen Aufgabe im Hauptthread gewartet wird. Daher können wir einen der Aufzählungstypen std::future_status, nämlich std::future_status::ready, verwenden, um wie folgt zu erkennen, ob die asynchrone Aufgabe abgeschlossen ist:
//Erkennen Sie, ob die asynchrone Aufgabe abgeschlossen ist
if ( result.wait_for(std::chrono::seconds(0)) == std::future_status::ready) {
//异步任务已完成
}
Darüber hinaus können wir auch std::promise und std::future zusammen verwenden, Um detailliertere asynchrone Programmieranforderungen zu erfüllen. Beispielsweise müssen wir bei der Multithread-Programmierung möglicherweise warten, bis ein Thread abgeschlossen ist, bevor wir andere Aufgaben ausführen können. Zu diesem Zeitpunkt können wir std::promise und std::future verwenden, um den Semaphormechanismus zu implementieren:
// Enthält Header-Datei
//Asynchrone Aufgabe
void foo(std::promise
std::this_thread::sleep_for(std::chrono::seconds(2)); //模拟长时间的任务 p.set_value(); //使用set_value()将结果返回给主线程
}
//Hauptfunktion
int main() {
//创建promise对象 std::promise<void> p; //获取future对象 std::future<void> f = p.get_future(); //在单独的线程中运行异步任务 std::thread t(foo, std::ref(p)); //在此期间执行其他任务 std::cout << "Main Task Started" << std::endl; //等待异步任务完成 f.wait(); //输出结果 std::cout << "Main Task Finished" << std::endl; //等待异步线程完成 t.join();
}
In diesem Beispiel verwenden wir std::promise, um einen Semaphorwert (d. h. void) an den asynchronen Thread zu übertragen. Nach dem Wenn der asynchrone Thread die Aufgabe abschließt, verwenden Sie die Funktion set_value(), um den Semaphorwert an den Hauptthread zurückzugeben. Der Hauptthread muss warten, bis der asynchrone Thread abgeschlossen ist, bevor er mit der Ausführung fortfahren kann.
Zusammenfassung
Asynchrone Programmierung ist eine wichtige Fähigkeit in der C++-Programmierung, die die Gesamtleistung und Parallelität des Programms verbessern kann. In diesem Artikel stellen wir die Grundprinzipien der asynchronen Programmierung in C++ vor und zeigen mehrere verwandte Beispielcodes. Wenn Sie die Leistung Ihres Programms verbessern möchten oder Multithread-Programmierung durchführen müssen, gehören asynchrone Programmierkenntnisse zu den Kerntechnologien, die Sie beherrschen müssen.
Das obige ist der detaillierte Inhalt vonAsynchrone Programmiertechniken in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!