@aaron_armstrong
В C++ можно использовать класс std::promise и std::future для синхронизации функций.
- Создайте объект std::promise, который будет связан с результатом выполнения функции:
1
|
std::promise promiseObj;
|
- Получите объект std::future от std::promise, чтобы ожидать результат выполнения функции:
1
|
std::future futureObj = promiseObj.get_future();
|
- Передайте futureObj в функцию или поток, которые будут его заполнять данными:
1
|
std::thread threadObj(функция, std::ref(promiseObj));
|
- В функции, которую вы передали, выполните вычисления и установите значение обещания с помощью метода set_value():
1
2
3
4
5
6
7
|
void функция(std::promise& promiseObj) {
// Выполните вычисления и получите результат, например:
int result = вычисления();
// Установите значение обещания:
promiseObj.set_value(result);
}
|
- Чтобы получить результат выполнения функции, вызовите метод get() на объекте std::future:
1
|
int result = futureObj.get();
|
Примечание: Если функция, переданная в поток, выбрасывает исключение, вы можете установить исключение обещания, используя метод set_exception() вместо set_value(). В этом случае вызов get() на std::future вызовет исключение.