<future>
işlevleri
async
future_category
make_error_code
make_error_condition
swap
|
async
Zaman uyumsuz bir sağlayıcıyı temsil eder.
template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
async(Fn&& fn, ArgTypes&&... args);
template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
async(launch policy, Fn&& fn, ArgTypes&&... args);
Parametreler
policy
Bir launch
değer.
Açıklamalar
Kısaltmaların tanımları:
Kısaltma | Açıklama |
---|---|
dfn |
çağrısının decay_copy(forward<Fn>(fn)) sonucu. |
dargs |
çağrılarının decay_copy(forward<ArgsTypes>(args...)) sonuçları. |
Ty |
türü result_of<Fn(ArgTypes...)>::type . |
İlk şablon işlevi döndürür async(launch::any, fn, args...)
.
İkinci işlev, ilişkili zaman uyumsuz durumu ve değerleriyle dargs
dfn
birlikte bir sonuç tutan bir nesne ve ayrı bir yürütme iş parçacığını yönetmek için bir iş parçacığı nesnesi döndürürfuture<Ty>
.
Başlatma dışında bir tür olmadığı sürece decay<Fn>::type
, ikinci işlev aşırı yükleme çözümlemesine katılmaz.
C++ standardı, ilke ise launch::async
işlevin çağrılabilir nesneyi yeni bir iş parçacığında çağırır gibi davrandığını belirtir. Bu, genellikle yeni bir iş parçacığı oluşturmayla sonuçlanabilir ancak uygulamanın eşdeğer davranış elde etmek için başka mekanizmalar kullanabileceği anlamına gelir. Ancak, Microsoft uygulaması şu anda bu davranışa tam olarak uymaz. Windows ThreadPool'dan iş parçacıklarını alır ve bu da yeni bir iş parçacığı yerine geri dönüştürülen bir iş parçacığı sağlayabilir. Bu, ilkenin launch::async
etkin bir şekilde olarak launch::async|launch::deferred
uygulandığı anlamına gelir. ThreadPool tabanlı uygulamanın bir diğer etkisi de iş parçacığı tamamlandığında iş parçacığı yerel değişkenlerinin yok edilmesine ilişkin bir garanti olmamasıdır. İş parçacığı geri dönüştürülecek ve için yeni bir çağrıya async
sağlanmışsa, eski değişkenler hala mevcuttur. ile async
iş parçacığı yerel değişkenlerini kullanmaktan kaçınmanızı öneririz.
ise policy
launch::deferred
, işlev ilişkili zaman uyumsuz durumunu ertelenmiş bir işlevi tutuyor olarak işaretler ve döndürür. İlişkili zaman uyumsuz durumun etkin olarak hazır olmasını bekleyen herhangi bir iyileştirilmiş olmayan işleve yapılan ilk çağrı, değerlendirerek INVOKE(dfn, dargs..., Ty)
ertelenen işlevi çağırır.
Her durumda, nesnenin future
ilişkili zaman uyumsuz durumu, bir özel durum oluşturarak veya normal olarak döndürerek değerlendirme INVOKE(dfn, dargs..., Ty)
tamamlanana kadar hazır olarak ayarlanmamıştır. İlişkili zaman uyumsuz durumun sonucu, oluşturulduysa veya değerlendirmenin döndürdüğü değerde bir özel durumdur.
Not
ile başlatılan bir future
göreve (veya ile başlatılan son shared_future
görev) için, görev tamamlanmadıysa yok edici engeller; başka bir deyişle, bu iş parçacığı henüz çağrılmazsa .get()
veya .wait()
görev çalışmaya devam ederse std::async
engeller. 'den std::async
alınan bir future
yerel kapsamın dışına taşınırsa, onu kullanan diğer kod, paylaşılan durumun hazır hale gelmesi için yıkıcısının engelleyebileceğinin farkında olmalıdır.
Sahte işlev INVOKE
içinde <functional>
tanımlanır.
Microsoft'a özgü
Geçirilen işlev zaman uyumsuz olarak yürütürse, Windows İş Parçacığı Havuzu'nda yürütülür. Daha fazla bilgi için bkz . İş Parçacığı Havuzları. Eşzamanlı iş parçacıklarının sayısı, 500 iş parçacığı olan iş parçacığı havuzu varsayılanı ile sınırlıdır.
Windows 11 ve Windows Server 2022'de uygulamalar varsayılan olarak en fazla 64 mantıksal işlemciye sahip tek bir işlemci grubuyla sınırlıydı. Bu, eşzamanlı olarak yürütülen iş parçacıklarının sayısını 64 ile sınırlamıştı. Daha fazla bilgi için bkz . İşlemci Grupları.
Windows 11 ve Windows Server 2022'den başlayarak, işlemler ve iş parçacıkları, varsayılan olarak sistemdeki tüm işlemcileri ve 64'ten fazla işlemcisi olan makinelerdeki birden çok gruba yayılan işlemci benzitelerine sahiptir. Eşzamanlı iş parçacığı sayısı sınırı artık sistemdeki toplam mantıksal işlemci sayısıdır.
future_category
Nesnelerle future
ilişkili hataları karakterize eden nesneye bir başvuru error_category
döndürür.
const error_category& future_category() noexcept;
make_error_code
Gelecekteki hataları karakterize eden error_category nesnesiyle birlikte bir error_code oluşturur.
inline error_code make_error_code(future_errc Errno) noexcept;
Parametreler
Errno
future_errc
Bildirilen hatayı tanımlayan değer.
Dönüş Değeri
error_code(static_cast<int>(Errno), future_category());
make_error_condition
Hataları karakterize future
eden nesnesiyle error_category
birlikte bir error_condition
oluşturur.
inline error_condition make_error_condition(future_errc Errno) noexcept;
Parametreler
Errno
future_errc
Bildirilen hatayı tanımlayan değer.
Dönüş Değeri
error_condition(static_cast<int>(Errno), future_category());
swap
Bir nesnenin ilişkili zaman uyumsuz durumunu diğerininkiyle promise
değiştirir.
template <class Ty>
void swap(promise<Ty>& Left, promise<Ty>& Right) noexcept;
template <class Ty, class... ArgTypes>
void swap(packaged_task<Ty(ArgTypes...)>& Left, packaged_task<Ty(ArgTypes...)>& Right) noexcept;
Parametreler
Left
Soldaki promise
nesne.
Right
Doğru promise
nesne.