在C++中,promise是一種用于在一個線程中設置某個值,然后在另一個線程中獲取該值的機制。promise對象允許一個線程設置一個值(通常是一個異步操作的結果),而future對象允許另一個線程獲取這個值。
promise對象通常與future對象一起使用,以便在一個線程中設置值,然后在另一個線程中獲取值。promise對象提供了set_value()方法來設置值,并且可以通過get_future()方法獲取一個與這個promise對象相關聯的future對象。
以下是一個簡單的示例,演示了promise和future的基本用法:
#include <iostream>
#include <thread>
#include <future>
void setValue(std::promise<int> &prom) {
prom.set_value(42);
}
int main() {
std::promise<int> prom;
std::future<int> fut = prom.get_future();
std::thread t(setValue, std::ref(prom));
int value = fut.get();
std::cout << "Value received from another thread: " << value << std::endl;
t.join();
return 0;
}
在上面的示例中,我們創建了一個promise對象和一個future對象。然后我們創建了一個新的線程,并將promise對象傳遞給該線程的函數。在該函數中,我們調用set_value()方法設置值為42。在主線程中,我們通過調用future對象的get()方法獲取這個值,并打印出來。
需要注意的是,promise對象只能設置一次值。如果嘗試多次設置值,會拋出一個std::future_error異常。