Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - [198]

Шрифт
Интервал

до вызова >swap (если таковой действительно был), ассоциируется с >*this. Асинхронный результат, который был ассоциирован с объектом >*this до вызова >swap (если таковой действительно был), ассоциируется с >other.

Исключения

Нет.

>STD::PROMISE, ДЕСТРУКТОР

Уничтожает объект >std::promise.

Объявление

>~promise();

Результат

Уничтожает >*this. Если с >*this ассоциирован асинхронный результат и в этом результате не хранится задача или исключение, то результат становится готов, причем в него помещается исключение >std::future_error с кодом ошибки >std::future_errc::broken_promise.

Исключения

Нет.

>STD::PROMISE::GET_FUTURE, ФУНКЦИЯ-ЧЛЕН

Извлекает экземпляр >std::future для асинхронного результата, ассоциированного с >*this.

Объявление

>std::future get_future();

Предусловия

С >*this ассоциировал асинхронный результат.

Возвращаемое значение

Экземпляр >std::future для асинхронного результата, ассоциированного с >*this.

>Исключения

Исключение типа >std::future_error с кодом ошибки >std::future_errc::future_already_retrieved, если объект >std::future уже был получен для этого асинхронного результата с помощью предшествующего обращения к >get_future().

>STD::PROMISE::SET_VALUE, ФУНКЦИЯ-ЧЛЕН

Сохраняет значение в асинхронном результате, ассоциированном с >*this.

Объявление

>void promise::set_value();

>void promise::set_value(R& r);

>void promise::set_value(R const& r);

>void promise::set_value(R&& r);

Предусловия

С >*this ассоциирован асинхронный результат.

Результат

Сохраняет >r в асинхронном результате, ассоциированном с >*this, если >ResultType — не >void.

Постусловия

Асинхронный результат, ассоциированный с >*this, готов и содержит значение. Все потоки, ожидающие асинхронного результата, разблокируются.

Исключения

Исключение типа >std::future_error с кодом ошибки >std::future_errc::promise_already_satisfied, если в асинхронном результате уже находится значение или исключение. Любое исключение, возбужденное копирующим или перемещающим конструктором >r.

Синхронизация

Обращения к >set_value(), >set_value_at_thread_exit(), >set_exception() и >set_exception_at_thread_exit() сериализуются. Успешное обращение к >set_value() происходит-раньше обращения к функции >std::future::get() или >std::shared_future::get(), которая извлекает сохраненное значение.

>STD::PROMISE::SET_VALUE_AT_THREAD_EXIT, ФУНКЦИЯ-ЧЛЕН

Сохраняет значение в асинхронном результате, ассоциированном с >*this, но не делает этот результат готовым раньше момента завершения потока.

Объявление

>void promise::set_value_at_thread_exit();

>void promise::set_value_at_thread_exit(R& r);

>void promise::set_value_at_thread_exit(R const& r);

>void promise::set_value_at_thread_exit(R&& r);

Предусловия

С >*this ассоциирован асинхронный результат.

Результат

Сохраняет >r в асинхронном результате, ассоциированном с >*this, если >ResultType — не >void. Помечает, что в асинхронном результате хранится значение. Планирует перевод ассоциированного асинхронного результата в состояние готовности в момент завершения потока.

Постусловия

Асинхронный результат, ассоциированный с >*this, содержит значение, но не является готовым до завершения текущего потока. Все потоки, ожидающие асинхронного результата, будут разблокированы, когда текущий поток завершится.

Исключения

Исключение типа >std::future_error с кодом ошибки >std::future_errc::promise_already_satisfied, если в асинхронном результате уже находится значение или исключение. Любое исключение, возбужденное копирующим или перемещающим конструктором >r.

Синхронизация

Обращения к >set_value(), >set_value_at_thread_exit(), >set_exception() и >set_exception_at_thread_exit() сериализуются. Успешное обращение к >set_value() происходит-раньше обращения к функции >std::future::get() или >std::shared_future::get(), которая извлекает сохраненное значение.

>STD::PROMISE::SET_EXCEPTION, ФУНКЦИЯ-ЧЛЕН КЛАССА

Сохраняет исключение в асинхронном результате, ассоциированном с >*this.

Объявление

>void set_exception(std::exception_ptr e);

Предусловия

С >*this ассоциирован асинхронный результат. >(bool)e равно >true.

Результат

Сохраняет >e в асинхронном результате, ассоциированном с >*this.

Постусловия

Асинхронный результат, ассоциированный с >*this, готов и содержит исключение. Все потоки, ожидающие асинхронного результата, разблокируются.

Исключения

Исключение типа >std::future_error с кодом ошибки >std::future_errc::promise_already_satisfied, если в асинхронном результате уже находится значение или исключение.

Синхронизация

Обращения к >set_value(), >set_value_at_thread_exit(), >set_exception() и >set_exception_at_thread_exit() сериализуются. Успешное обращение к >set_value() происходит-раньше обращения к функции >std::future::get() или >std::shared_future::get(), которая извлекает сохраненное исключение.

>STD::PROMISE::SET_EXCEPTION_AT_THREAD_EXIT,ФУНКЦИЯ-ЧЛЕН

Сохраняет исключение в асинхронном результате, ассоциированном с >*this, но не делает этот результат готовым раньше момента завершения потока.

Объявление

>void set_exception_at_thread_exit(std::exception_ptr e);

Предусловия

С >*this ассоциирован асинхронный результат,


Еще от автора Энтони Д Уильямс
Викиномика. Как массовое сотрудничество изменяет всё

Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, "Викиномика" стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции.


Рекомендуем почитать
Человеческий фактор в программировании

Хорошее программное обеспечение создается людьми. Так же как и плохое. Именно поэтому основная тема этой книги — не аппаратное и не программное обеспечение, а человеческий фактор в программировании (peopleware). Первое издание «Constantine on Peopleware» признано классическим трудом в области информационных технологий. Новая книга Ларри Константина включает все 52 легендарные статьи из предыдущей книги и 25 новых эссе.Peopleware охватывает все аспекты, связанные с ролью людей в разработке программного обеспечения.


QT 4: программирование GUI на С++

Единственное официальное руководстро по практическому программированию в среде Qt 4.1.Применяя средства разработки Qt компании «Trolltech», вы сможете создавать на С++ промышленные приложения, которые естественно работают в средах Windows, Linux/UNIX, Linux для встроенных систем без изменения программного кода и Mac Os X. Книга написана сотрудниками компании «Trolltech». Она представляет собой практическое руководство по успешному применению самой мощной из всех созданных до сих пор версий Qt — Qt 4.1.Из книги «Qt 4: программирование GUI на С++» вы узнаете о наиболее эффективных приемах и методах программирования с применением Qt 4 и овладеете ключевыми технологиями в самых различных областях — от архитектуры Qt модель/представление до мощного графического процессора 2D.


Энциклопедия разработчика модулей ядра Linux

Linux Kernel Module Programming Guide свободная книга; Вы можете воспроизводить и/или изменять ее в соответствии с версией 2 (или, в вашем случае, любой более поздней версией) GNU General Public License, опубликованной Free Software Foundation. Версия 2 поставляется с этим документом в Приложении E.Эта книга распространяется в надежде, что будет полезна, но без какой-либо гарантии; даже без подразумеваемой гарантии высокого спроса или пригодности какой-либо для специфической цели.Автор поощряет широкое распространение этой книги для персонального или коммерческого использования, если вышеупомянутое примечание относительно авторского права остается неповрежденным, и распространитель твердо придерживается условий GNU General Public License (см.


Применение Windows API

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Использование ListView в режиме виртуального списка

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.