美文网首页
std::promise使用

std::promise使用

作者: pandazhong | 来源:发表于2018-10-20 21:41 被阅读0次

std::promise和std::future配合,可以在线程之间传递数据。

#include <iostream>

#include <future>

#include <chrono>

void Thread_Fun1(std::promise<int> &p)

{

    //为了突出效果,可以使线程休眠5s

    std::this_thread::sleep_for(std::chrono::seconds(5));

    int iVal = 233;

    std::cout << "input data (int):" << iVal << std::endl;

    //传入数据iVal

    p.set_value(iVal);

}

void Thread_Fun2(std::future<int> &f)

{

    //阻塞函数,直到收到相关联的std::promise对象传入的数据

    auto iVal = f.get(); //iVal = 233

    std::cout << "recv(int):" << iVal << std::endl;

}

int main()

{

    //声明一个std::promise对象pr1,其保存的值类型为int

    std::promise<int> pr1;

    //声明一个std::future对象fu1,并通过std::promise的get_future()函数与pr1绑定

    std::future<int> fu1 = pr1.get_future();

    //创建一个线程t1,将函数Thread_Fun1及对象pr1放在线程里面执行

    std::thread t1(Thread_Fun1, std::ref(pr1));

    //创建一个线程t2,将函数Thread_Fun2及对象fu1放在线程里面执行

    std::thread t2(Thread_Fun2, std::ref(fu1));

    //阻塞至线程结束

    t1.join();

    t2.join();

    return 1;

}

相关文章

  • std::promise使用

    std::promise和std::future配合,可以在线程之间传递数据。 #include #include...

  • 转载--std::ref应用

    在std::promise范例中,使用了std::ref将future对象传递给引用参数类型的任务函数。 std:...

  • std promise的使用

    注意:正确的使用promise要必须知道它什么时候会抛出异常 example:

  • C++11为什么需要std::ref/reference_wra

    在std::promise范例中,使用了std::ref将future对象传递给引用参数类型的任务函数。 如果直接...

  • 2018-10-23 step

    C++ 11 几个特性的整理 std::future - std::promise 解决的问题 返回值的异步获取:...

  • c++ 异步(下) future头文件

    future std::future 类型模板是为了等待其他线程上的异步结果,其和 std::promise,st...

  • C++ 的 std::promise 和 std::future

    介绍 编写多线程应用时,无法避免的要进行线程间数据同步/通信。std::promise 和 std::future...

  • C++11多线程-异步运行(2)之std::packaged_t

    上一篇介绍的std::promise通过set_value可以使得与之关联的std::future获取数据。本篇介...

  • C++11 std::future, std::promise,

    本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用,不得用于任何商业用途。 c...

  • C++基础知识

    std是指名称空间,using namespace std; 是指使用名称空间std 位的取值为0,1 使用aut...

网友评论

      本文标题:std::promise使用

      本文链接:https://www.haomeiwen.com/subject/moxvzftx.html