首页 > 其他分享 >std::promise返回的是future对象

std::promise返回的是future对象

时间:2024-03-17 13:23:10浏览次数:20  
标签:std get 对象 future promise 线程

在C++中,std::promise对象调用get_future()方法返回一个std::future对象,而不是指针、引用或其他类型的对象。std::future对象用于获取与std::promise对象相关联的异步操作的结果。

std::promisestd::future是C++标准库中的一部分,用于处理异步操作的结果。std::promise对象可以在一个线程中存储一个值或异常,而std::future对象则可以在另一个线程中检索这个值或异常。它们通常一起使用,以实现线程间的同步和数据的传递。

以下是一个简单的示例,展示了如何使用std::promisestd::future

#include <iostream>  
#include <thread>  
#include <future>  
  
void threadFunction(std::promise<int>&& prom) {  
    // 模拟一些工作  
    std::this_thread::sleep_for(std::chrono::seconds(1));  
    int result = 42; // 假设这是异步操作的结果  
    prom.set_value(result); // 将结果存储在promise中  
}  
  
int main() {  
    std::promise<int> prom; // 创建一个promise对象  
    std::future<int> fut = prom.get_future(); // 从promise获取future对象  
  
    std::thread t(threadFunction, std::move(prom)); // 启动线程,并将promise对象移动给线程函数  
  
    int value = fut.get(); // 在主线程中阻塞等待,直到获取到结果  
    std::cout << "Value: " << value << std::endl; // 输出结果  
  
    t.join(); // 等待线程完成  
    return 0;  
}

 

 

在上面的示例中,threadFunction函数接收一个右值引用的std::promise<int>对象,并在模拟完成一些工作后,通过调用set_value方法将结果存储在promise中。在main函数中,我们创建了std::promise<int>对象,并通过调用get_future方法获取了一个std::future<int>对象。然后,我们启动了一个新线程来执行threadFunction,并将promise对象移动给线程函数。最后,在主线程中,我们调用fut.get()来阻塞等待并获取异步操作的结果。

因此,get_future()返回的是一个std::future对象,而不是指针或引用。这个std::future对象可以用于检索与std::promise对象相关联的值或异常。

 

标签:std,get,对象,future,promise,线程
From: https://www.cnblogs.com/music-liang/p/18078466

相关文章

  • C++示例:学习C++标准库,std::unordered_map无序关联容器的使用
    01std::unordered_map介绍std::unordered_map是C++标准库中的一种无序关联容器模板类,它提供了一种将键映射到值的方法。它的底层基于哈希表实现,内容是无序的,可以在平均情况下在O(1)的时间复杂度内完成插入、查找和删除操作。值得注意的是,哈希表可能存在冲突,即不同的键值......
  • promise
    [函数对象]小括号左边一定是函数,小数点左边一定是对象,具备二者特性的对象是函数对象functionFn(){}//函数Fn.prototype//函数对象Fn.bind({})//函数对象constfn=newFn()//Fn前方有new关键字,此时Fn为构造函数,fn为实例对象,简称对象只有函数对......
  • 你是怎么理解ES6中 Promise的?使用场景?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(function(result){doSomethi......
  • 京东ES支持ZSTD压缩算法上线了:高性能,低成本
    京东ES支持ZSTD压缩算法上线了,这是一种高性能、低成本的压缩算法,能够提高数据存储和传输的效率,同时降低存储和带宽成本。ZSTD算法是一种快速压缩算法,可提供比其他压缩算法更高的压缩比和更快的压缩速度。这意味着,京东ES用户可以更高效地存储和传输数据,同时节省存储和带宽......
  • Python3 stdout read readline 阻塞情况简单说明
         Python3stdoutreadreadline阻塞情况简单说明 执行命令行,并获取返回结果。代码1:process=subprocess.Popen(cmd_string,stdout=subprocess.PIPE,\      universal_newlines=True,\      stderr=subprocess.PIPE,\    ......
  • 多线程系列(二十) -CompletableFuture使用详解
    一、摘要在上篇文章中,我们介绍了Future相关的用法,使用它可以获取异步任务执行的返回值。我们再次回顾一下Future相关的用法。publicclassFutureTest{publicstaticvoidmain(String[]args)throwsException{longstartTime=System.currentTimeMillis()......
  • Promise
    Promise是什么1.1理解​1.抽象表达:​1)promise是一门新的技术(ES6语言规范)​2)promise是js进行异步编程的新解决方案旧方案是单纯使用回调函数​2.具体表达​1)从语法上来说Promise是一个构造函数,​2)从功能上来说:promise对象用来封装一个异步操作并可以获取成果失......
  • 并发支持库:多线程中的std::call_once单次调用
    std::call_once中定义template<classCallable,class...Args>voidcall_once(std::once_flag&flag,Callable&&f,Args&&...args);确保函数或者代码片段在在多线程环境下,只需要执行一次。常用的场景如Init()操作或一些系统参数的获取等。此函数在POSIX中类似p......
  • 【JS】Promise.all实现所有接口加载完成loading关闭
    将每个请求封装成promise对象,当请求到数据后都resolve出去,再调用Promsie.all方法将每个promise对象作为参数传入进去。这样每个api的promise对象状态都resolve“解决后”,就能在Promise.all([p1,p2…p]).then中拿到所有api请求完成的状态,从而实现效果。created(){t......
  • 【Javascript】 Promise 对象(二)
    Promise.all()Promise.all()方法用于将多个Promise实例,包装成一个新的Promise实例。constp=Promise.all([p1,p2,p3]);上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Pr......