c++11 future promise
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11 future promise相关的知识,希望对你有一定的参考价值。
std::future
std::future 代表未来得到,可以使用std::async 来执行
std::async 为异步编程的高级封装,封装了std::future的操作,基本上可以代替std::thread。
int result_future()
{
int i=0,ret = 0;
std::this_thread::sleep_for(std::chrono::seconds(2));
return ret + 1;
}
1 情况
获取时执行,会阻塞执行,分两种情况,1 是时间
std::future<int> result = std::async(result_future);
//以下为假设执行了1秒,而result_future执行了2秒,则实际上只等待了1秒
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << result.get() << std::endl;
2 情况
std::future<int> result = std::async(result_future);
//以下为假设执行了3秒,而result_future执行了2秒,则实际上不用等待了,直接执行
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << result.get() << std::endl;--->直接执行
std::promise
#include <iostream>
#include <future>
#include <string>
#include <thread>
void print(std::promise<int>& p)
{
//模拟执行数据库查询
std::this_thread::sleep_for(std::chrono::milliseconds(500));
p.set_value(1000);
}
void dotest(int in)
{
std::cout << "the value is "<<in<< std::endl;
}
int main()
{
std::promise<int> promise;
std::future<int> result = promise.get_future();
std::thread t(print, std::ref(promise));
dotest(result.get());
t.join();
std::cout << "the thread is over" << std::endl;
return 0;
}
以上用线程执行了一个print函数,std::promise这种值使用set_value 函数来设置值,这样,线程有了返回值,线程之间的通信问题变得非常简单!
std::future和std::promise 配合执行线程间通信,是一个非常好的方式!
以上是关于c++11 future promise的主要内容,如果未能解决你的问题,请参考以下文章
[C++11 多线程异步] --- std::promise/std::future
[C++11 多线程异步] --- std::promise/std::future
[C++11 多线程异步] --- std::promise/std::future