std::async
De cppreference.com
[] |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Dclar dans l'en-tte <future>
|
||
template< class Function, class... Args> std::future<typename std::result_of<Function(Args...)>::type> async( Function&& f, Args&&... args ); |
(1) | (depuis C++11) |
template< class Function, class... Args > std::future<typename std::result_of<Function(Args...)>::type> async( std::launch policy, Function&& f, Args&&... args ); |
(2) | (depuis C++11) |
Le
async fonction de modle excute la fonction f asynchrone (potentiellement dans un thread spar) et renvoie une std::future qui finira par contenir le rsultat de cet appel de fonction .Original:
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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
1)
Se comporte comme
async(std::launch::async | std::launch::deferred, f, args...). En d'autres termes, f peut tre dmarr dans un nouveau thread ou il peut tre excut de faon synchrone lorsque le std::future rsultant est interrog pour une valeur .Original:
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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
Appelle une fonction avec des arguments
f args selon une politique de lancement spcifique policy: Original:
Calls a function
f with arguments args according to a specific launch policy policy: The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- Si le' async drapeau est positionn (c.--
policy & std::launch::async != 0), puisasyncgnre un nouveau thread d'excution comme parstd::thread(f, args...), sauf que si la fonction renvoie une valeurfou lve une exception, elle est stocke dans l'tat partag accessible travers le std::future queasyncretourne l'appelant .Original:If the async flag is set (i.e.policy & std::launch::async != 0), thenasyncspawns a new thread of execution as if bystd::thread(f, args...), except that if the functionfreturns a value or throws an exception, it is stored in the shared state accessible through the std::future thatasyncreturns to the caller.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- Si le drapeau' diffr est activ (c'est dire
policy & std::launch::deferred != 0), puis convertisasyncargs...la mme manire que par le constructeur std::thread, mais ne lance pas un nouveau thread d'excution. Au lieu de cela,' valuation paresseuse est ralise: le premier appel un non-chronomtr attendre fonction sur le std::future queasyncrenvoy l'appelant feraf(args...)tre excut dans le thread courant. Tous les accs supplmentaires la mme std::future retournera le rsultat immdiatement .Original:If the deferred flag is set (i.e.policy & std::launch::deferred != 0), thenasyncconvertsargs...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 thatasyncreturned 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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- Si drapeaux la fois le std::launch::async et std::launch::deferred sont mis en
policy, c'est la mise en uvre s'il faut effectuer l'excution asynchrone ou l'valuation paresseuse .Original: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.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Paramtres
| f | - | objet fonction ou la fonction appeler
Original: function or function object to call The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | ||||||||||||||||||||||||
| args... | - | paramtres passer au
fOriginal: parameters to pass to fThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | ||||||||||||||||||||||||
| policy | - | valeur masque, o chaque bit de contrler les mthodes autorises d'excution
Original: bitmask value, where individual bits control the allowed methods of execution
The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | ||||||||||||||||||||||||
Retourne la valeur
std::future se rfrant la valeur de retour de la fonction .
Original:
std::future referring to the return value of the function.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exceptions
Lance std::system_error avec std::errc::resource_unavailable_try_again condition d'erreur si la politique de lancement est std::launch::async et la mise en uvre est incapable de dmarrer un nouveau thread .
Original:
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.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Notes
La mise en uvre peut tendre le comportement de la premire surcharge de std::async en permettant d'autres (dfinie par l'implmentation) bits dans la politique de lancement par dfaut .
Original:
The implementation may extend the behavior of the first overload of std::async by enabling additional (implementation-defined) bits in the default launch policy.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Exemple
#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)
return std::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';
}
Rsultat :
The sum is 10000