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

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

.

>STD::PACKAGED_TASK, ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР

Конструирует один объект >std::packaged_task из другого, передавая владение асинхронным результатом и задачей, ассоциированными с объектом >other, вновь сконструированному.

Объявление

>packaged_task(packaged_task&& other) noexcept;

Результат

Конструирует новый экземпляр >std::packaged_task.

Постусловия

Асинхронный результат и задача, которые были ассоциированы с объектом >other до вызова конструктора, ассоциируются со вновь сконструированным объектом >std::packaged_task. С объектом >other больше не связан никакой асинхронный результат.

Исключения

Нет.

>STD::PACKAGED_TASK, ПЕРЕМЕЩАЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ

Передает владение ассоциированным асинхронным результатом от одного объекта >std::packaged_task другому.

Объявление

>packaged_task& operator=(packaged_task&& other) noexcept;

Результат

Передает владение асинхронным результатом и задачей, ассоциированными с объектом >other, объекту >*this и отбрасывает ранее ассоциированный асинхронный результат, как если бы было выполнено предложение >std::packaged_task(other).swap(*this).

Постусловия

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

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

>*this

Исключения

Нет.

>STD::PACKAGED_TASK::SWAP, ФУНКЦИЯ-ЧЛЕН

Обменивает владение асинхронными результатами, ассоциированными с двумя объектами >std::packaged_task.

Объявление

>void swap(packaged_task& other) noexcept;

Результат

Обменивает владение асинхронными результатами и задачами, ассоциированными с объектами >other и >*this.

Постусловия

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

Исключения

Нет.

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

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

Объявление

>~packaged_task();

Результат

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

Исключения

Нет.

>STD::PACKAGED_TASK::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::PACKAGED_TASK::RESET, ФУНКЦИЯ-ЧЛЕН

Ассоциирует экземпляр >std::packaged_task с новым асинхронным результатом для той же задачи.

Объявление

>void reset();

Предусловия

С >*this ассоциирована асинхронная задача.

Результат

Эквивалентно >*this = packaged_task(std::move(f)), где >f ― хранимая задача, ассоциированная с >*this.

Исключения

Исключение типа >std::bad_alloc, если не удалось выделить память для нового асинхронного результата.

>STD::PACKAGED_TASK::VALID, ФУНКЦИЯ-ЧЛЕН

Проверяет, ассоциированы ли с >*this задача и асинхронный результат.

Объявление

>bool valid() const noexcept;

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

>true, если с >*this ассоциированы задача и асинхронный результат, иначе >false.

Исключения

Нет.

>STD::PACKAGED_TASK::OPERATOR(), ОПЕРАТОР ВЫЗОВА

Вызывает задачу, ассоциированную с экземпляром >std::packaged_task, и сохраняет возвращенное ей значение или исключение в ассоциированном асинхронном результате.

Объявление

>void operator()(ArgTypes... args);

Предусловия

С >*this ассоциирована задача.

Результат

Вызывает ассоциированную задачу, как если бы было выполнено предложение >INVOKE(func, args...). Если вызов завершается нормально, то сохраняет возвращенное значение в асинхронном результате, ассоциированном с >*this. Если задача возбуждает исключение, то сохраняет это исключение в асинхронном результате, ассоциированном с >*this.

Постусловия

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

Исключения

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

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

Успешное обращение к оператору вызова синхронизируется-с обращением к >std::future::get() или >std::shared_future::get(), которое извлекает хранимое значение или исключение.

>STD::PACKAGED_TASK::MAKE_READY_AT_THREAD_EXIT, ФУНКЦИЯ-ЧЛЕН

Вызывает задачу, ассоциированную с экземпляром >std::packaged_task, и сохраняет возвращенное ей значение или исключение в ассоциированном асинхронном результате, но не делает этот результат готовым раньше момента завершения потока.


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

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


Рекомендуем почитать
Справочник по PHP

Вниманию читателей предлагается справочник по PHP.Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.


Стандарты программирования на С++. 101 правило и рекомендация

Эта книга поможет новичку стать профессионалом, так как в ней представлен сконцентрированный лучший опыт программистов на С++, обобщенный двумя экспертами мирового класса.Начинающий программист найдет в ней простые и понятные рекомендации для ежедневного использования, подкрепленные примерами их конкретного применения на практике.Опытные программисты найдут в ней советы и новые рекомендации, которые можно сразу же принять на вооружение. Программисты-профессионалы могут использовать эту книгу как основу для разработки собственных стандартов кодирования, как для себя лично, так и для группы, которой они руководят.Конечно, книга рассчитана в первую очередь на профессиональных программистов с глубокими знаниями языка, однако она будет полезна любому, кто захочет углубить свои знания в данной области.


Практика и проблематика моделирования бизнес-процессов

Цель книги – познакомить читателей с существующими подходами и решениями в области моделирования бизнес-архитектуры предприятия. В книге освещаются различные аспекты данной проблематики, в том числе такие вопросы как базовые подходы к моделированию и возможности современных инструментальных средств.Особое внимание уделяется специфике организации проектов по разработке моделей бизнес-архитекуры. На основе практического опыта реализации проектов по моделированию бизнес-процессов в различных предметных областях проанализированы и обобщены типичные риски, ошибки и заблуждения основных участников, даны рекомендации по их предупреждению.


Освой самостоятельно С++ за 21 день

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков.


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

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


MFC и OpenGL

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