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 函数来设置值,这样,线程有了返回值,线程之间的通信问题变得非常简单!
promise 执行结果

std::future和std::promise 配合执行线程间通信,是一个非常好的方式!

以上是关于c++11 future promise的主要内容,如果未能解决你的问题,请参考以下文章

C++11promise和future介绍

[C++11 多线程异步] --- std::promise/std::future

[C++11 多线程异步] --- std::promise/std::future

[C++11 多线程异步] --- std::promise/std::future

[C++11 多线程异步] --- std::promise/std::future

c++11 future promise