Aracılığıyla paylaş


<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::asynciş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::deferreduygulandığı 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 asyncsağlanmışsa, eski değişkenler yine mevcut olacaktır. ile asynciş 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 futuregöreve (veya ile başlatılan son shared_futuregö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::asyncengeller. '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.

Ayrıca bkz.

<future>