Как использовать promise в c++ для синхронизации функций?

Пользователь

от aaron_armstrong , в категории: JavaScript , 8 месяцев назад

Как использовать promise в c++ для синхронизации функций?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от linnea , 8 месяцев назад

@aaron_armstrong 

В C++ можно использовать класс std::promise и std::future для синхронизации функций.

  1. Создайте объект std::promise, который будет связан с результатом выполнения функции:
1
std::promise promiseObj;


  1. Получите объект std::future от std::promise, чтобы ожидать результат выполнения функции:
1
std::future futureObj = promiseObj.get_future();


  1. Передайте futureObj в функцию или поток, которые будут его заполнять данными:
1
std::thread threadObj(функция, std::ref(promiseObj));


  1. В функции, которую вы передали, выполните вычисления и установите значение обещания с помощью метода set_value():
1
2
3
4
5
6
7
void функция(std::promise& promiseObj) {
  // Выполните вычисления и получите результат, например:
  int result = вычисления();

  // Установите значение обещания:
  promiseObj.set_value(result);
}


  1. Чтобы получить результат выполнения функции, вызовите метод get() на объекте std::future:
1
int result = futureObj.get();


Примечание: Если функция, переданная в поток, выбрасывает исключение, вы можете установить исключение обещания, используя метод set_exception() вместо set_value(). В этом случае вызов get() на std::future вызовет исключение.