Un afficheur de petits points en C++ 11

J'utilise fréquemment un exemple banal de multiprogrammation pour enseigner les threads, 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, pour C++ 11 et utilisant les threads standards auxquels nous avons (enfin!) accès. Ici, le thread 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>
int main() {
   using namespace std;
   using namespace std::chrono;
   bool fini = false;
   thread th([&fini] () {
      while (!fini) {
         cout << '.';
         this_thread::sleep_for(seconds{1}); // avec C++ 14, seconds{1} peut s'écrire 1s tout simplement
      }
   });
   char c;
   cin >> c;
   fini = true;
   th.join();
}

Valid XHTML 1.0 Transitional

CSS Valide !