<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::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ış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::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 edilmesine ilişkin bir garanti 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 hala mevcuttur. ile asynciş 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 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. 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.

Ayrıca bkz.

<future>