Un afficheur de petits points en C++

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, prévue pour Microsoft Windows, pour les curieuses et les curieux...

#include <windows.h>
unsigned long __stdcall lire_une_touche(void*);
#include <iostream>
int main() {
   using namespace std;
   bool fini = false; // attention, il y a une subtilité ici (ce code est subtilement incorrect)
   HANDLE h = CreateThread(0, 0, lire_une_touche, &fini, 0, 0);
   while (!fini) {
      cout << '.' << flush;
      Sleep(1000);
   }
   WaitForSingleObject(h, INFINITE);
   CloseHandle(h);
}
unsigned long __stdcall lire_une_touche(void *p) {
   bool &fini = *static_cast<bool*>(p);
   using std::cin;
   char c;
   cin.get(c);
   fini = true;
   return 0;
}

Notez que c'est un exemple simple et opérationnel (bien qu'il cache un bogue subtil, qui ne se manifestera que sur certaines architectures matérielles... Parlez-en à votre chic prof!), question de s'acclimater au concept, mais qu'il ne s'agit que du début de la réflexion (on retravaille le tout de plusieurs manières).


Valid XHTML 1.0 Transitional

CSS Valide !