<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
politika
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ışla kesinlikle uyumlu değildir. İş parçacıklarını Windows ThreadPool'dan alır ve bu da yeni bir iş parçacığı yerine geri dönüştürülmüş 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 olacağının garantisi 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 yine mevcut olacaktır. ile async
iş parçacığı yerel değişkenlerini kullanmaktan kaçınmanızı öneririz.
İlke iselaunch::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 zamanlanmamış herhangi bir 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 bir özel durumdur veya değerlendirme tarafından döndürülen herhangi bir değerdir.
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; bkz. İş Parçacığı Havuzları. Eşzamanlı iş parçacıklarının sayısı, iş parçacığı havuzu varsayılanı ile sınırlıdır (şu anda 500). Donanımda eşzamanlı olarak yürütülen iş parçacıklarının sayısı şu anda işlemin işlemci grubundaki mantıksal işlemci sayısıyla sınırlıdır, bu nedenle etkin bir şekilde 64 ile sınırlıdır; bkz. İşlemci Grupları.
future_category
Nesnelerle future
ilişkili hataları karakterize eden error_category nesnesine başvuru 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
Bildirilen hatayı tanımlayan bir future_errc değeri.
Dönüş Değeri
error_code(static_cast<int>(Errno), future_category());
make_error_condition
Gelecekteki hataları karakterize eden error_category nesnesiyle birlikte bir error_condition oluşturur.
inline error_condition make_error_condition(future_errc Errno) noexcept;
Parametreler
Errno
Bildirilen hatayı tanımlayan bir future_errc değeri.
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.