Un afficheur de petits points en C++ contemporain (depuis C++ 11)

J'utilise fréquemment un exemple banal de multiprogrammation pour enseigner les fils d'exécution, exemple dans lequel j'affiche un petit point par seconde à la console jusqu'à ce qu'un usager appuie sur une touche. Ceci permet de combiner opération cyclique qui ne doit pas être bloquée et opération bloquante.

Voici une version C++ opérationnelle et sans prétention, qui compile pour l'essentiel depuis C++ 11 (j'utilise bien sûr du code plus contemporain ici) et utilisant std::thread auquel nous avons (enfin!) accès. Ici, le fil d'exécution th démarre dès sa création et exécute une opération de notre choix, c'est-à-dire une λ affichant un point par seconde jusqu'à ce que fini devienne true. Comparez si vous le souhaitez avec une version dépendante d'une plateforme particulière. Évidemment, la version présentée ici, elle, est pleinement portable.

#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
int main() {
   using namespace std;
   using namespace std::chrono;
   atomic<bool> fini { false };
   thread th([&fini] () {
      while (!fini) {
         cout << '.' << flush;
         this_thread::sleep_for(1s);
      }
   });
   char c;
   cin.get(c);
   fini = true;
   th.join();
}

Valid XHTML 1.0 Transitional

CSS Valide !