类模板std::packaged_task包装任何可调用(Callable)目标(函数、lambda 表达式、bind 表达式或其他函数对象),使得能异步调用它。其返回值或所抛异常被存储于能通过std::future对象访问的共享状态中。 正如std::function,std::packaged_task是多态、具分配器的容器:可在堆上或以提供的分配器分配其所存储的可调用目标。
std::packaged_task<int(conststd::vector<int>&)>lambda_pask_task(sum_labmda); 首先,类模版packaged_task需要传入一个模版参数,这里传入的是int(const std::vector<int>&),该参数是用来告诉packaged_task其接受的可调用对象对应的函数调用签名是什么,这里第1个int是用来代表可调用对象返回值类型是int,其接受...
std::packaged_task 对象是异步 Provider,它在某一时刻通过调用被包装的任务来设置共享状态的值。 std::future 对象是一个异步返回对象,通过它可以获得共享状态的值,当然在必要的时候需要等待共享状态标志变为 ready. View Code View Code std::remove_reference https://en.cppreference.com/w/cpp/types/remove_...
https://en.cppreference.com/w/cpp/thread/packaged_task Line 6: Create a task that will execute pow(2, 11) asynchronously (in a different thread). Line 7: Start the task. Line 8: Get the future object. A future (also known as a promise) is an object that allows waiting for and ...
#include <cmath>#include <future>#include <iostream>#include <thread>intmain(){std::packaged_task<int(int,int)>task([](inta,intb){returnstd::pow(a, b);});std::future<int>result=task.get_future();task(2,9);std::cout<<"2^9 = "<<result.get()<<'\n';task.reset();result=...
cppreference.com 创建账户 页面 讨论 变换 查看 编辑 历史 std::packaged_task<R(Args...)>::operator()C++ 并发支持库 std::packaged_task void operator()( ArgTypes... args ); (C++11 起) 如同以 INVOKE<R>(f, args...) 调用存储的任务 f。任务返回值或任何抛出的异常被存储于共享状态。令...
packaged_task::valid packaged_task::swap Getting the result packaged_task::get_future Execution packaged_task::operator() packaged_task::make_ready_at_thread_exit packaged_task::reset Non-member functions swap(std::packaged_task) Helper classes uses_allocator<std::packaged_task> (until C++17) ...
std::packaged_task可以包装一个任务(task),这个任务是一个可调用对象(Callable Object),对象保存此任务执行后的值,通常会将此值与另外线程中的std::future对象共享。所以packaged_task对象有两个最基本的元素: 被打包的任务(task),是一个可调用对象
C++11中的std::packaged_task是个模板类。std::packaged_task包装任何可调⽤⽬标(函数、lambda表达式、bind表达式、函数对象)以便它可以被异步调⽤。它的返回值或抛出的异常被存储于能通过std::future对象访问的共享状态中。std::packaged_task类似于std::function,但是会⾃动将其结果传递给std::future对象。...
packaged_task( packaged_task&& rhs ); (5) (since C++11) 构造一个新的std::packaged_task对象。 1%29构造一个std::packaged_task对象,没有任务和共享状态。 2%29构造一个std::packaged_task对象具有共享状态和任务的副本,并在std::forward<F>(f)此构造函数不参与重载解决方案。std::decay<F>::type是...