如何做网站地图视频,网络设计培训,网站数据搬家,表白网页生成制作目录
1--std::async的使用
2--std::packaged_task的使用
3--std::promise的使用 1--std::async的使用 std::async用于启动一个异步任务#xff0c;并返回一个std::future对象#xff1b;std::future对象里含有异步任务线程入口函数的结果#xff1b; std::launch::deferr…目录
1--std::async的使用
2--std::packaged_task的使用
3--std::promise的使用 1--std::async的使用 std::async用于启动一个异步任务并返回一个std::future对象std::future对象里含有异步任务线程入口函数的结果 std::launch::deferred 表示调用线程入口函数将会被延迟到 std::future 的 wait() 或 get() 调用当 wait() 或者 get() 没有被调用时线程入口函数不会被调用(线程不会被创建) #include iostream
#include thread
#include mutex
#include futureclass Sample{
public:// 线程入口函数int thread(int value){std::cout thread id: std::this_thread::get_id() std::endl;std::chrono::microseconds dura(value); // reststd::this_thread::sleep_for(dura);return 5;}};int main(int argc, char *argv[]){Sample sample;int value 5000;// std::async用于启动一个异步任务并返回一个std::future对象// std::future对象里含有异步任务线程入口函数的结果std::cout thread id: std::this_thread::get_id() std::endl;std::futureint result std::async(Sample::thread, sample, value);// std::launch::deferred 表示调用线程入口函数将会被延迟到 std::future 的wait()或get()调用// 当wait()或者get()没有被调用时线程入口函数不会被调用(线程不会被创建)// std::futureint result std::async(std::launch::deferred, Sample::thread, sample, value);// result.get()等待thread()执行完毕获取结果后主线程才继续往下执行std::cout resule.get(): result.get() std::endl; // result.wait() // 等待线程返回但不返回结果std::cout main thread continue ... std::endl;return 0;
}
2--std::packaged_task的使用 std::packaged_task 用于打包任务其包装各种可调用对象方便后续作为线程入口函数 #include iostream
#include thread
#include mutex
#include future// 线程入口函数
int thread(int value){std::cout thread id: std::this_thread::get_id() std::endl;std::chrono::microseconds dura(value); // reststd::this_thread::sleep_for(dura);return 5;
}int main(int argc, char *argv[]){// std::packaged_task 用于打包任务其包装各种可调用对象方便后续作为线程入口函数std::cout thead id: std::this_thread::get_id() std::endl;std::packaged_taskint(int) mypt(thread);int value 5000;std::thread thread1(std::ref(mypt), value);thread1.join();std::futureint result mypt.get_future();std::cout result.get(): result.get() std::endl;return 0;
}
3--std::promise的使用 std::promise 用于在其他线程中使用某个线程中的值在下面的实例代码中thread2 使用了 thread1 中的 result 值 #include iostream
#include thread
#include mutex
#include future// 线程入口函数
int thread(std::promiseint tmpp, int clac){clac;clac * 10; std::cout thread id: std::this_thread::get_id() std::endl;int result clac;tmpp.set_value(result);return 0;
}void thread_2(std::futureint tmpf){auto result2 tmpf.get();std::cout tmpf.get(): result2 std::endl;
}int main(int argc, char *argv[]){// std::promise 用于在某个线程中赋值并在其他线程中将值取来用std::cout thead id: std::this_thread::get_id() std::endl;std::promiseint prom; int clac 1;std::thread thread1(thread, std::ref(prom), clac);thread1.join();// 将promise中的值取来用std::futureint result prom.get_future();std::thread thread2(thread_2, std::ref(result));thread2.join();return 0;
}