Graph100 a bien répondu là :
http://www.purebasic.fr/french/viewtopi ... 18#p162118
Dans un programme fenêtré normal, l'application n'est réveillée par le système d'exploitation que s'il se passe quelque chose : clic sur un gadget, déplacement de fenêtre, mouvement souris, etc. -> WaitWindowEvent()
Si l'application doit effectuer des actions régulièrement, ou des traitements très longs, elle peut demander à l'OS de la réveiller à des intervalles réguliers, avec un timer par exemple, ou gérer à part certains événements (cas de photoshop et de la gestion clavier). Des threads peuvent gérer cela sans même que le programme principal n'ait à intervenir. -> WaitWindowEvent() est normalement suffisant.
Si l'application est en plein écran synchronisé avec un FlipBuffers(), là on entre dans un autre domaine, celui de la boucle d'affichage synchronisée. Le programme tourne en continu et doit effectuer toutes les opérations en moins d'une frame. Par exemple, pour un affichage à 60Hz, la carte graphique va piocher une image complète de l'écran dans la mémoire vidéo 60 fois par seconde, donc si l'on veut afficher quelque chose de différent, on doit le faire en moins de 1/60ème de seconde.
Dans ce laps de temps, il faut traiter toutes les entrées (événements utilisateur/réseau/micro/etc.), faire les calculs de déplacements/IA/etc, faire toutes les sorties (graphique/audio/réseau/etc.). Si on n'y arrive pas, il y a lag (ralentissement).
Maintenant, du fait des différences de latence des entrées/sorties, les programmeurs de grosses applications temps-réel dissocient souvent les différentes parties. Par exemple, il n'y a rien de plus énervant de ne pouvoir quitter un jeu dont l'affichage est planté, car le programme n'a pas séparé la gestion du clavier. On s'arrange donc pour qu'un thread gère le réseau, un autre le clavier, un autre l'affichage, ...
En général, un programme PureBasic est suffisamment léger pour ne pas avoir à s'occuper de tout ça. Et puis PureBasic gère en interne certaines choses, qui sont en fait assez différentes d'un OS à l'autre. En ce qui concerne la gestion des événements, puisqu'on veut être rapide (moins de 1/60ème de sec!) il ne faut pas "bloquer" le programme avant d'être sûr d'avoir fait tout ce qu'on devait faire. Une fois qu'on en est sûr, on peut rendre la main à l'OS pour qu'il effectue ses tâches de fond : c'est normalement intégré au FlipBuffers().
Voilà, je voulais être bref, c'est raté, désolé...
Edit: grilled par graph100
