#include<cmath>#include<functional>#include<future>#include<iostream>#include<thread>// unique function to avoid disambiguating the std::pow overload setintf(intx,inty){returnstd::pow(x, y); }voidtask_lambda(){std::packaged_task<int(int,int)>task([](inta,intb) {returnstd::pow(a, b...
传递给std::packaged_task的模板参数是函数签名,如void()或int(std::string&,double*),而构造对象时传入的函数或可调用对象的参数和返回值必须一样或可转换为签名中对应的类型,如构造std::packaged_task<double(double)>类型的对象时可传入float func(int i)函数作为参数。 一个packaged_task<std::string(std:...
voidset_value(constT& value);//或者voidset_value(T&& value); set_exception():设置共享状态的异常信息。 voidset_exception(std::exception_ptr p); get_future():返回一个与当前std::promise关联的std::future对象。 std::future<T> get_future(); #include <iostream>#include<future>#include<thread...
可以看到,即便countletters函数返回值是void,packaged_task对象tsk2仍旧保存了其返回值,并且拥有这个共享状态,但是这个共享状态的类型是void。 另外,如同这样的调用形式与是等效的,也是重载的operator()正确的调用形式。 (4)std::packaged_task::make_ready_at_thread_exit() 如同字面意思,在被调用的线程退出后,将共...
packaged_task<void()>来代替它,这就是我使用它的全部功能。(如果没有效率的话,packaged_task<void...
std::packaged_task是一个模板类,其模板参数是可调用对象的类型。例如,如果我们有一个返回void并接受一个int参数的函数,那么我们可以创建一个std::packaged_task的对象。 std::packaged_task主要包含以下几个公有成员函数: 构造函数:用于构造std::packaged_task对象,并将可调用对象封装在内部。
void set_value(T&& value); 1. 2. set_exception():设置共享状态的异常信息。 void set_exception(std::exception_ptr p); 1. get_future():返回一个与当前std::promise关联的std::future std::future<T> get_future(); 1. #include <iostream> ...
#include <iostream>#include <future>void calculateSum(std::promise<int>& promise, int a, int b) {int sum = a + b;// 设置值promise.set_value(sum);}int main() {std::promise<int> promise;std::future<int> result = promise.get_future();// 启动异步任务std::thread thread(calculateSum...
()<<'\n';}voidtask_bind(){std::packaged_task<int()>task(std::bind(f,2,11));std::future<int>result=task.get_future();task();std::cout<<"task_bind:\t"<<result.get()<<'\n';}voidtask_thread(){std::packaged_task<int(int,int)>task(f);std::future<int>result=task.get_...
() << '\n'; } void task_bind() { std::packaged_task<int()> task(std::bind(f, 2, 11)); std::future<int> result = task.get_future(); task(); std::cout << "task_bind:\t" << result.get() << '\n'; } void task_thread() { std::packaged_task<int(int,int)> task...