std::async
Материал из cppreference.com
![]() | Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <future> | ||
template<class Function, class... Args> std::future<typenamestd::result_of<Function(Args...)>::type> | (1) | (начиная с C++11) |
template<class Function, class... Args> std::future<typenamestd::result_of<Function(Args...)>::type> | (2) | (начиная с C++11) |
async
шаблон функции выполняет функцию f
асинхронно (возможно, в отдельном потоке) и возвращает std::future, что будет в итоге результат этого вызова функции.Оригинал:
The template function
async
runs the function f
asynchronously (potentially in a separate thread) and returns a std::future that will eventually hold the result of that function call.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Ведет себя так же, как async(std::launch::async|std::launch::deferred, f, args...). Иными словами,
2) f
может быть запущен в новый поток или он может быть запущен синхронно, когда в результате std::future запрашивается значение.Оригинал:
Behaves the same as async(std::launch::async|std::launch::deferred, f, args...). In other words,
f
may be started in a new thread or it may be run synchronously when the resulting std::future is queried for a value.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вызывает функцию
f
с аргументами args
в соответствии с определенной политикой запуск policy
Оригинал:
Calls a function
f
with arguments args
according to a specific launch policy policy
: Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если' асинхронных флаг установлен (т.е. policy &std::launch::async!=0), то
async
порождает новый поток исполнения, как по std::thread(f, args...), за исключением того, что если функцияf
возвращает значение или генерирует исключение, оно хранится в общем состоянии доступным через std::future, чтоasync
возвращается к вызывающему.Оригинал:If the async flag is set (i.e. policy &std::launch::async!=0), thenasync
spawns a new thread of execution as if by std::thread(f, args...), except that if the functionf
returns a value or throws an exception, it is stored in the shared state accessible through the std::future thatasync
returns to the caller.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если отложенный' флаг установлен (т.е. policy &std::launch::deferred!=0), то
async
новообращенныхargs...
же, как и конструктором std::thread, но не породить новый поток выполнения. Вместо этого,' ленивая оценка производится: при первом вызове, не приурочен ждать функции на std::future, чтоasync
возвращается вызывающему вызоветf(args...)
должны быть выполнены в текущем потоке. Все последующие обращения к той же std::future будет возвращать результат сразу.Оригинал:If the deferred flag is set (i.e. policy &std::launch::deferred!=0), thenasync
convertsargs...
the same way as by std::thread constructor, but does not spawn a new thread of execution. Instead, lazy evaluation is performed: the first call to a non-timed wait function on the std::future thatasync
returned to the caller will causef(args...)
to be executed in the current thread. All further accesses to the same std::future will return the result immediately.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
- Если оба std::launch::async и std::launch::deferred флаги установлены в
policy
, это до реализации, выполнять ли асинхронное выполнение или ленивые вычисления.Оригинал:If both the std::launch::async and std::launch::deferred flags are set inpolicy
, it is up to the implementation whether to perform asynchronous execution or lazy evaluation.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править]Параметры
f | — | вызываемая функция или функция объекта Оригинал: function or function object to call Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. | ||||||||||||||||
args... | — | параметры для передачи f Оригинал: parameters to pass to f Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. | ||||||||||||||||
policy | — | битовой маски значение, где отдельные биты управления разрешенные методы исполнения
Оригинал: bitmask value, where individual bits control the allowed methods of execution
Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
[править]Возвращаемое значение
std::future со ссылкой на возвращаемого значения функции.
Оригинал:
std::future referring to the return value of the function.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Исключения
Выдает std::system_error с ошибкой std::errc::resource_unavailable_try_again условии, если запуск политика std::launch::async и осуществление не в состоянии начать новую тему.
Оригинал:
Throws std::system_error with error condition std::errc::resource_unavailable_try_again if the launch policy is std::launch::async and the implementation is unable to start a new thread.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Заметки
Реализация может расширять поведение первой перегрузки std::async путем предоставления дополнительных (осуществление определенных) биты в политику запуска по умолчанию.
Оригинал:
The implementation may extend the behavior of the first overload of std::async by enabling additional (implementation-defined) bits in the default launch policy.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Пример
Запустить этот код
#include <iostream>#include <vector>#include <algorithm>#include <numeric>#include <future> template<typename RAIter>int parallel_sum(RAIter beg, RAIter end){typename RAIter::difference_type len = end-beg;if(len <1000)returnstd::accumulate(beg, end, 0); RAIter mid = beg + len/2;auto handle = std::async(std::launch::async, parallel_sum<RAIter>, mid, end);int sum = parallel_sum(beg, mid);return sum + handle.get();} int main(){std::vector<int> v(10000, 1);std::cout<<"The sum is "<< parallel_sum(v.begin(), v.end())<<'\n';}
Вывод:
The sum is 10000