std::promise返回的是future对象

在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对象相关联的值或异常。

 

posted @ 2024-03-17 13:11  He_LiangLiang  阅读(16)  评论(0编辑  收藏  举报