首页 > 编程语言 >C++future promise

C++future promise

时间:2023-02-04 18:13:14浏览次数:78  
标签:std fut int C++ future promise include

A future is an object that can retrieve a value from some provider object or function, properly synchronizing this access if in different threads.
provider比较抽象,可以是函数可以是类,是别人提供好的东西

A promise is an object that can store a value of type T to be retrieved by a future object (possibly in another thread), offering a synchronization point.

future用于访问异步操作结果
std::async可以异步执行函数,可能是放到另一个线程去执行,返回值是一个future类型
std::promise用于线程同步的工具,储存一些数据,供future获取
以async为例
代码来源

#include <iostream>             // std::cout
#include <future>               // std::async, std::future
#include <chrono>               // std::chrono::milliseconds

// a non-optimized way of checking for prime numbers:
bool is_prime(int x)
{
    for (int i = 2; i < x; ++i)
        if (x % i == 0)
            return false;
    return true;
}

int main()
{
    // call function asynchronously:
    std::future < bool > fut = std::async(is_prime, 6666661);

    // do something while waiting for function to set future:
    std::cout << "checking, please wait";
    std::chrono::milliseconds span(100);
    while (fut.wait_for(span) == std::future_status::timeout)
        std::cout << '.';

    bool x = fut.get();         // retrieve return value

    std::cout << "\n6666661 " << (x ? "is" : "is not") << " prime.\n";

    return 0;
}

后面C++20里的协程我猜应该是基于此实现的,理解一下有好处

#include <iostream>       // std::cout
#include <functional>     // std::ref
#include <thread>         // std::thread
#include <future>         // std::promise, std::future

void print_int (std::future<int>& fut) {
  int x = fut.get();//获取异步执行结果
  std::cout << "value: " << x << '\n';
}

int main ()
{
  std::promise<int> prom;                      // create promise

  std::future<int> fut = prom.get_future();    // engagement with future

  std::thread th1 (print_int, std::ref(fut));  // send future to new thread

  prom.set_value (10);                         // 模拟fulfill promise
                                               // (synchronizes with getting the future)
  th1.join();
  return 0;
}

标签:std,fut,int,C++,future,promise,include
From: https://www.cnblogs.com/lxzbky/p/17092067.html

相关文章

  • C++ atomic的Cacheline及Memory fence问题
    我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生racecondition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。但在实践中,用原子指......
  • QML调用C++的三种方法
    1.注册法由于QML引擎与Qt元对象系统的紧密集成,可以从QML代码访问由QObject派生的类适当公开的任何功能。这使得C++类的属性和方法可以直接从QML访问,通常很少或无需修改。......
  • Qml调用C++方法初探
    为什么会在QML中调用C++方法?引入Qml的一个重要目的就是UI和逻辑的解耦,我们可以把业务逻辑用C++实现,Qml只用来开发界面,这样在后续程序改版过程中,基本上可以不动逻辑只改UI比......
  • QML(14)——QML与C++交互方式总结1/3(qml调用C++的public函数)
    一、效果qml文件中,可以调用C++类的公共函数   二、步骤1、C++类文件创建C++文件时,一定要勾选下面3项 MyQmlClass.h #ifndefMYQMLCLASS_H#defineMYQMLCL......
  • C++校园导游系统[2023-02-04]
    C++校园导游系统[2023-02-04]校园导游问题描述:用无向网表示校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径......
  • C++ 引用:他是坤坤也是鸡哥
    一、前言作为一名ikun,我最喜欢的明星就是坤坤,但是坤坤又不只叫坤坤,因为他的成名之作《鸡你太美》,ikun们就经常亲切的叫他鸡哥。这个过程中,鸡哥就是我们ikun给偶像坤坤......
  • c++ 一键提取pdf文件图片工具
    日常工作的时候,有时候需要将一个pdf文件中的图片全部提取出来使用,那么这时候就需要一个简单的方法来做这个事情,而不是一个一个图片截图做操作。效果如下:工具下载地址:​​pdf......
  • C/C++BUG: [Error] invalid array assignment
    在写字符串赋值给结构体成员的时候出现的报错报错的行,代码表示改变数据BookName,是将数据存储到结构体中,但是这样赋值会报错。报错这是结构体的组成,result是指向链表其......
  • c++函数
    一,函数基础1.函数一般用一个名字表示,即函数名。返回类型,函数名,参数列表,和函数体构成了函数定义。函数定义的语法形式类型说明符 函数名(含类型说明的形式参数表){ 函数体}......
  • c++中类模板遇到的 不知道怎么解决
    提问:   指定name类型为string填写string的字符串报错啥原因不清楚但报错现实填入的是一个char数组也不知道啥原因解答: 参考代码:template<typenameNameT......