Bibliothèque de threads C ++ - Constructeur de fonction

La description

Il est utilisé pour construire un objet thread.

Déclaration

Voici la déclaration de la fonction std :: thread :: thread.

thread() noexcept;
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
thread (const thread&) = delete;	
thread (thread&& x) noexcept;

C ++ 11

thread() noexcept;
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
thread (const thread&) = delete;	
thread (thread&& x) noexcept;

Paramètres

  • fn - C'est un pointeur vers une fonction, un pointeur vers un membre ou tout autre type d'objet fonction à construire par déplacement.

  • args... - Arguments passés à l'appel à fn.

  • x - C'est un objet thread.

Valeur de retour

aucun

Des exceptions

aucun

Courses de données

modifie x.

Exemple

L'exemple ci-dessous explique la fonction std :: thread :: thread.

#include <iostream>
#include <utility>
#include <thread>
#include <chrono>
#include <functional>
#include <atomic>
 
void f1(int n) {
   for (int i = 0; i < 5; ++i) {
      std::cout << "1st Thread executing\n";
      ++n;
      std::this_thread::sleep_for(std::chrono::milliseconds(10));
   }
}

void f2(int& n) {
   for (int i = 0; i < 5; ++i) {
      std::cout << "2nd Thread executing\n";
      ++n;
      std::this_thread::sleep_for(std::chrono::milliseconds(10));
   }
}
 
int main() {
   int n = 0;
   std::thread t1;
   std::thread t2(f1, n + 1);
   std::thread t3(f2, std::ref(n));
   std::thread t4(std::move(t3));
   t2.join();
   t4.join();
   std::cout << "Final value of n is " << n << '\n';
}

Compilons et exécutons le programme ci-dessus, cela produira le résultat suivant -

1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
1st Thread executing
2nd Thread executing
2nd Thread executing
1st Thread executing
Final value of n is 5