Giriş
Şu satırı dahil ederiz.
Constructor - lambda
Şöyle yaparız.
int alan ve std::vector<int> dönen bir metod olsun. Şöyle yaparız.
Şöyle yaparız.
Bu constructor C++17 ile kaldırıldı. Şöyle yaparız. Çıktı olarak 1 alırız.
get_future metodu
Şöyle yaparız.
Constructor içinde belirtilen metodu çağırmak için kullanılır.
Örnek
Şöyle yaparız. Bu örnekte packaged_task bir başka thread içinde çağrılmıyor.
Bir başka thread içinde çağırmak için şöyle yaparız.
Şu satırı dahil ederiz.
#include <future>
packaged_task bir metodu başka bir thread içinden çağırmak için kullanılır. Çok alt seviye bir kullanım şeklidir. Bu kadar alt seviye bir işle uğraşmak istemiyorsak std::asynch'i kullanmak daha kolay.Constructor - lambda
Şöyle yaparız.
std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; });
Constructor - functionint alan ve std::vector<int> dönen bir metod olsun. Şöyle yaparız.
std::vector<int> foo (int n) {
std::vector<int> v { 2 * n, 3 * n };
return v;
}
std::packaged_task<std::vector<int>(int)> task { foo };
Constructor - std::bindŞöyle yaparız.
std::promise<int> promise;
auto operation = [](std::promise<int>& promise) { promise.set_value(1); };
std::packaged_task<void ()> fn { std::bind(operation, std::move(promise)) };
Constructor - AllocatorBu constructor C++17 ile kaldırıldı. Şöyle yaparız. Çıktı olarak 1 alırız.
int one() noexcept {
return 1;
}
int main() {
std::packaged_task<int()> task(std::allocator_arg, std::allocator<void>{}, one);
task();
std::cout << task.get_future().get() << std::endl;
}
get_future metodu
Şöyle yaparız.
std::packaged_task<...(...,...)> task (...);
auto future = task.get_future();
operator ()Constructor içinde belirtilen metodu çağırmak için kullanılır.
Örnek
Şöyle yaparız. Bu örnekte packaged_task bir başka thread içinde çağrılmıyor.
task(); // invoke the function
Eğer parametre verilmesi gerekiyorsa şöyle yaparız.task(2,3);
ÖrnekBir başka thread içinde çağırmak için şöyle yaparız.
std::packaged_task<...(...)> task { fooFunc };
auto& future = task.get_future();
std::thread { std::move(task), i }.detach();
future.wait();
future.get();
Hiç yorum yok:
Yorum Gönder