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).