Middle
C++'ta std::future nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
std::future — C++ dilinde, asenkron bir işlemin sonucu (değer veya istisna) temsil eden şablon sınıfıdır ve gelecekte erişilebilir olacaktır. Ayrı bir thread veya std::async aracılığıyla başlatılan görevin sonucunu almak için kullanılır.
Ana özellikler:
- Asenkronluk: Mevcut thread’i engellemeden bir işlem gerçekleştirmeye olanak tanır.
- Sonucu alma:
get()yöntemi, işlemin sonucunu alır. Sonuç henüz hazır değilse,get()mevcut thread’i sonuç hazır olana kadar veya bir istisna alınana kadar engeller. - Veri iletimi:
std::promisenesnesiyle ilişkilidir ve sonucu veya istisnayı ayarlama imkanı sağlar. - Durum:
std::future’ın, sonucun hazır olup olmadığını gösteren bir durumu vardır.wait()veyawait_for()ile kontrol edilebilir. - Tek seferlik alma:
get()yöntemi, herstd::futurenesnesi için yalnızca bir kez çağrılabilir. - Sonuç tipi: Asenkron işlemin döndürdüğü değer türüyle belirlenir.
std::async ile kullanım örneği:
#include <future>
#include <thread>
#include <chrono>
#include <iostream>
int calculate_something() {
std::this_thread::sleep_for(std::chrono::seconds(1));
return 42;
}
// `std::async` ile `std::future` kullanımı örneği
int main() {
// Asenkron işlemi başlat
std::future<int> result_future = std::async(std::launch::async, calculate_something);
// İşlem hesaplanırken başka bir iş yap
std::cout << "Başka bir şey yapılıyor..." << std::endl;
// Sonucu al (hazır değilse engeller)
int result = result_future.get();
std::cout << "Sonuç: " << result << std::endl;
return 0;
}
std::promise ile kullanım örneği:
#include <future>
#include <thread>
#include <iostream>
void worker_function(std::promise<int> promise_obj) {
std::this_thread::sleep_for(std::chrono::seconds(1));
// Sonucu ayarla
promise_obj.set_value(123);
}
// `std::promise` ile `std::future` kullanımı örneği
int main() {
// Promise ve future oluştur
std::promise<int> promise_obj;
std::future<int> future_obj = promise_obj.get_future();
// Bir thread’de worker başlat, promise’yi geçir
std::thread worker_thread(worker_function, std::move(promise_obj));
// Worker çalışırken başka bir iş yap
std::cout << "Başka bir şey yapılıyor..." << std::endl;
// Sonucu al (hazır değilse engeller)
int result = future_obj.get();
std::cout << "Worker’dan gelen sonuç: " << result << std::endl;
// Worker thread’in bitmesini bekle
worker_thread.join();
return 0;
}
std::future’ın önemli metodları:
| Metod | Açıklama |
|---|---|
get() |
Sonucu alır. Henüz hazır değilse engeller. Her nesne için yalnızca bir kez çağrılabilir. |
valid() |
std::future’ın bir asenkron işlemle ilişkili olup olmadığını kontrol eder. |
wait() |
Sonuç erişilebilir olana kadar mevcut thread’i engeller (veya istisna atılır). |
wait_for() |
Belirtilen zaman aralığında sonucu bekler. Bekleme durumunu döner. |
wait_until() |
Belirli bir zaman noktasına kadar sonucu bekler. Bekleme durumunu döner. |
std::future, <future> kütüphanesinin bir parçasıdır ve asenkron hesaplamaların sonuçlarını yönetmek için kullanışlı bir yol sağlar, çoklu thread uygulamalarının geliştirilmesini kolaylaştırır.