Français | English

La programmation événementielle

Nous avons vu au chapitre du système d'exploitation, que celui-ci partage les ressources (comme le clavier et la souris) entre les programmes en trouvant d'abord à quel programme est destiné l'événement (une touche au clavier ou un clic de souris), puis en composant un message à l'intention du programme concerné.

Mais au moment où l'événement arrive, le programme peut être en train de faire autre chose. Alors le système ne va pas aiguiller le programme sur le nouveau message, mais il va plutôt le mémoriser, et ce sera la responsabilité du programme de demander le message lorsqu'il sera prêt à le traiter. En fait, plusieurs événements peuvent arriver pendant que le programme est occupé, alors le système possède une liste de messages en attente pour chaque programme. Puis lorsqu'un programme demande un message, le système lui remet celui qui est arrivé en premier. La liste est du style « premier arrivé, premier servi », comme lorsque nous faisons la queue pour aller au cinéma. C'est pourquoi cette liste est appelée la queue des messages.

Alors, dans un tel système, le travail du programme consiste à récupérer un message et à le traiter, puis à recommencer jusqu'à ce que le message signifie qu'il faut arrêter le programme. C'est le dernier message que recevra le programme qui devra alors enregistrer ses données au besoin, puis signifier au système qu'il a terminé. Le processus sera alors retiré de la mémoire et ses instructions ne seront donc plus exécutées.

Ce type de programme n'a pas un déroulement séquentiel comme un programme de type console. En effet, l'avancement du programme se fera en fonction des événements qui arrivent. On dit donc qu'il est piloté par les événements. La façon d'écrire un tel programme diffère aussi quelque peu de l'écriture d'un programme séquentiel. Nous pouvons faire le rapprochement avec un programme qui présente un menu et attend un choix de la part de l'usager. Selon le choix réalisé, il effectue certaines opérations, puis lorsqu'il a terminé, il présente à nouveau le menu et attend le prochain choix de l'usager. Le programme se termine lorsque l'usager choisit de quitter le programme.

La façon la plus simple d'écrire un tel programme est de créer des procédures qui correspondent aux choix possibles et d'appeler la procédure qui correspond au choix effectué. La programmation événementielle se réalise de la même façon, à la différence que le programme demande des messages au système plutôt que des choix à l'usager. Il faut noter que dans un tel système, l'usager peut tout de même choisir un item dans un menu, mais ce choix sera transformé en message placé dans la queue des messages que le programme recevra lorsqu'il en fera la demande après avoir traité les autres messages qui le précédaient.

Les environnements graphiques comme Windows ou X Window sous Linux fonctionnent de cette façon. Cependant, pour faciliter la tâche des programmeurs, il existe des bibliothèques qui font une grande partie du travail en mettant en place un nouvel environnement entre le système d'exploitation et le programme d'application. Le programme communique donc avec ce nouvel environnement plutôt que directement avec le système d'exploitation. Delphi fonctionne de la sorte, ainsi que Java et l'environnement .NET.

Ces environnements fournissent un ensemble de composants préprogrammés, ainsi que le code qui s'occupe de récupérer les messages du système et de les transmettre aux procédures appropriées. Les composants comportent donc déjà un fonctionnement standard que le programmeur peut modifier selon ses besoins. Ces environnement utilisent aussi la programmation orientée objet.