template
class shared_future {
public:
shared_future() noexcept;
shared_future(future&&) noexcept;
shared_future(shared_future&&) noexcept;
shared_future(shared_future const&);
shared_future& operator=(shared_future const&);
shared_future& operator=(shared_future&&) noexcept;
~shared_future();
bool valid() const noexcept;
см. описание get() const;
void wait() const;
template
future_status wait_for(
std::chrono::duration const& relative_time) const;
template
future_status wait_until(
std::chrono::time_point const& absolute_time)
const;
};
STD::SHARED_FUTURE
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект std::shared_future
, с которым не ассоциирован асинхронный результат.
Объявление
shared_future() noexcept;
Результат
Конструирует новый экземпляр std::shared_future
.
Постусловия
Функция valid()
вновь сконструированного экземпляра возвращает false
.
Исключения
Нет.
STD::SHARED_FUTURE
, ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР
Конструирует один объект std::shared_future
из другого, передавая владение асинхронным результатом, ассоциированным со старым объектом std::shared_future
, вновь сконструированному.
Объявление
shared_future(shared_future&& other) noexcept;
Результат
Конструирует новый экземпляр std::shared_future
.
Постусловия
Асинхронный результат, ассоциированный с объектом other
перед вызовом конструктора, ассоциируется с вновь сконструированным объектом std::shared_future
. С объектом other
больше не ассоциирован никакой асинхронный результат.
Исключения
Нет.
STD::SHARED_FUTURE
, КОНСТРУКТОР MOVE-FROM- STD::FUTURE
Конструирует объект std::shared_future
из объекта std::future
, передавая владение асинхронным результатом, ассоциированным с объектом std::future
, вновь сконструированному объекту std::shared_future
.
Объявление
shared_future(std::future&& other) noexcept;
Результат
Конструирует новый экземпляр std::shared_future
.
Постусловия
Асинхронный результат, ассоциированный с объектом other перед вызовом конструктора, ассоциируется с вновь сконструированным объектом std::shared_future
. С объектом other
больше не ассоциирован никакой асинхронный результат.
Исключения
Нет.
STD::SHARED_FUTURE
, КОПИРУЮЩИЙ КОНСТРУКТОР
Конструирует один объект std::shared_future
из другого, так что исходный объект и копия ссылаются на асинхронный результат, ассоциированный с исходным объектом std::shared_future
, если таковой был.
Объявление
shared_future(shared_future const& other);
Результат
Конструирует новый экземпляр std::shared_future
.
Постусловия
Асинхронный результат, ранее ассоциированный с объектом other
перед вызовом конструктора, теперь ассоциирован как с вновь сконструированным объектом std::shared_future
, так и с объектом other
.
Исключения
Нет.
STD::SHARED_FUTURE
, ДЕСТРУКТОР
Уничтожает объект std::shared_future
.
Объявление
~shared_future();
Результат
Уничтожает *this
. Если больше не существует объекта std::promise
или std::packaged_task
, ассоциированного с асинхронным результатом, который ассоциирован с *this
, и это последний экземпляр std::shared_future
, ассоциированный с этим асинхронным результатом, то асинхронный результат уничтожается.
Исключения
Нет.
STD::SHARED_FUTURE::VALID
, ФУНКЦИЯ-ЧЛЕН
Проверяет, ассоциирован ли асинхронный результат с данным экземпляром std::shared_future
.
Объявление
bool valid() const noexcept;
Возвращаемое значение
true
, если с *this
ассоциирован асинхронный результат, иначе false
.
Исключения
Нет.
STD::SHARED_FUTURE::WAIT
, ФУНКЦИЯ-ЧЛЕН
Если состояние, ассоциированное с *this
, содержит отложенную функцию, то эта функция вызывается. В противном случае ждет, когда будет готов асинхронный результат, ассоциированный с данным экземпляром std::shared_future
.
Объявление
void wait() const;
Предусловия
this->valid()
должна возвращать true
.
Результат
Обращения из нескольких потоков к функциям get()
и wait()
экземпляров std::shared_future
, разделяющих одно и то же ассоциированное состояние, сериализуются. Если ассоциированное состояние содержит отложенную функцию, то первое обращение к get()
или wait()
приводит к вызову этой функции и сохранению возвращенного ей значения или возбужденного ей исключения в асинхронном результате. Блокирует поток, пока не будет готов асинхронный результат, ассоциированный с *this
.
Читать дальше