namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:async

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:async [2019-11-20 15:00] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== async() ======
 +''#include'' [[..:include:thread]]
 +
 +<code cpp>
 +template <class F, class... Args> 
 +future<typename result_of<F(Args...)>::type> async(F&& f, Args&&... args)
 +template <class F, class... Args>
 +future<typename result_of<F(Args...)>::type> async(launch policy, F&& f, Args&&... args)
 +</code>
 + Startet einen (asynchronen) Ablauffaden (Thread) und liefert ein ''std::future<ResultType>''.
 +
 +==== Parameter ====
 +| ''policy''   | Startverhalten |
 +| ''f''   | Funktor |
 +| ''args''   | Argumente des Aufrufs ''f(args...)'' |
 +
 +Als Startverhalten können ''std::launch::async'' oder ''std::launch::deferred'' angegeben werden.
 +
 +==== Ergebnis ====
 +Rückgabewert: ''std::future<ResultType>''
 +
 +==== Siehe auch ====
 +[[ref|cref()]],
 +[[ref]],
 +[[..:Parallelverarbeitung#zeitversetzte Auswertung]].
 +
 +==== Beispiel ====
 +<code cpp async.cpp>
 +#include <atomic>
 +#include <functional>
 +#include <thread>
 +#include <iostream>
 + 
 +int countdown(std::atomic<int>& jobs)
 +{
 +  int done = 0, nr;
 +  while ( (nr = int(--jobs)) >= 0) ++done;
 +  return done;
 +}
 + 
 +int main()
 +{
 +  int n = 1000000;
 +  std::atomic<int> jobs(n);
 +  auto mode = std::launch::async;
 +  auto cnt1 = std::async(mode, countdown, std::ref(jobs));
 +  auto cnt2 = std::async(mode, countdown, std::ref(jobs));
 +  int a = cnt1.get(), b = cnt2.get();
 + 
 +  std::cout << a << " + " << b << " = " << a+b << '\n';
 +  assert(a+b == n);
 +}
 +</code>
  
kennen/lib/async.txt · Zuletzt geändert: 2019-11-20 15:00 von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki