Middle
C++-də std::future nədir?
sobes.tech Süni İntellekt
AI-dan cavab
std::future — bu C++-də şablon sinifdir və asinxron əməliyyatın nəticəsini (dəyər və ya istisna) təmsil edir və gələcəkdə əlçatan olacaq. Bu, müstəqil bir axın və ya std::async vasitəsilə başlatılan tapşırığın nəticəsini almaq üçün istifadə olunur.
Əsas xüsusiyyətlər:
- Asinxronluq: Cari axını bloklamadan əməliyyatı yerinə yetirməyə imkan verir.
- Nəticənin alınması:
get()metodu əməliyyatın nəticəsini əldə etməyə imkan verir. Əgər nəticə hələ hazır deyilsə,get()cari axını onun hazır olmasına və ya istisna alınmasına qədər bloklayacaq. - Məlumatların ötürülməsi:
std::promiseobyektinə bağlanır və nəticəni və ya istisnanı qurmağı təmin edir. - Vəziyyət:
std::futurenəticənin hazır olub-olmadığını göstərən vəziyyətə malikdir.wait()və yawait_for()ilə yoxlamaq olar. - Yalnız bir dəfə əldə etmə:
get()metodu hərstd::futureobyekti üçün yalnız bir dəfə çağırıla bilər. - Nəticə tipi: Asinxron əməliyyatın qaytardığı dəyər tipi ilə tiplənir.
std::async ilə istifadə nümunəsi:
#include <future>
#include <thread>
#include <chrono>
#include <iostream>
int calculate_something() {
std::this_thread::sleep_for(std::chrono::seconds(1));
return 42;
}
// `std::async` ilə `std::future` nümunəsi
int main() {
// Asinxron əməliyyatı başlatırıq
std::future<int> result_future = std::async(std::launch::async, calculate_something);
// Əməliyyat hesablanarkən başqa iş görürük
std::cout << "Doing something else..." << std::endl;
// Nəticəni alırıq (bloklama, əgər hazır deyilsə)
int result = result_future.get();
std::cout << "Result is: " << result << std::endl;
return 0;
}
std::promise ilə istifadə nümunəsi:
#include <future>
#include <thread>
#include <iostream>
void worker_function(std::promise<int> promise_obj) {
std::this_thread::sleep_for(std::chrono::seconds(1));
// Nəticəni qururuq
promise_obj.set_value(123);
}
// `std::promise` və `std::future` ilə nümunə
int main() {
// Promise və future yaradırıq
std::promise<int> promise_obj;
std::future<int> future_obj = promise_obj.get_future();
// İşçi funksiyasını müstəqil axında işə salırıq, promise ötürürük
std::thread worker_thread(worker_function, std::move(promise_obj));
// İşçi işləyərkən başqa iş görürük
std::cout << "Doing something else..." << std::endl;
// Nəticəni alırıq (bloklama, əgər hazır deyilsə)
int result = future_obj.get();
std::cout << "Result from worker: " << result << std::endl;
// İşçi axını gözləyirik
worker_thread.join();
return 0;
}
std::future-in əsas metodları:
| Metod | Təsviri |
|---|---|
get() |
Nəticəni alır. Əgər nəticə hələ hazır deyilsə, bloklayır. Hər std::future üçün yalnız bir dəfə çağırıla bilər. |
valid() |
std::future-in ümumi asinxron əməliyyat vəziyyəti ilə əlaqəli olub-olmadığını yoxlayır. |
wait() |
Cari axını, nəticə əlçatan olana qədər və ya istisna atılana qədər bloklayır. |
wait_for() |
Verilən zaman intervalında nəticəni gözləyir. Gözləmə vəziyyətini geri qaytarır. |
wait_until() |
Verilən vaxt nöqtəsinə qədər nəticəni gözləyir. Gözləmə vəziyyətini geri qaytarır. |
std::future <future> kitabxanasının bir hissəsidir və asinxron hesablamaların nəticələrini idarə etmək üçün rahat yol təqdim edir, çox axınlı tətbiqlərin inkişafını sadələşdirir.