Boucle d'attente d'événements

 

 

Lecture avec attente d'un événement avec extraction de celui-ci de la file

Nous savons déjà que les applications développées sous X Window utilisent le principe du pilotage par événements. L'application sera ainsi influencée par les actions de l'utilisateur par des événements de manière asynchrone (Voir chapitre introduction).

Image non trouvée !Les événements dont nous parlons ne sont pas des événements qui peuvent interrompre votre application à tout moment (comme peuvent l'être les signaux envoyés par le système). En fait, le serveur envoie un événement qui sera stocké dans une file d'événements (ou files messages IPC sous Unix ou de messages Windows par similitude à Windows de Microsoft). A notre application de lire régulièrement cette file d'événements afin d'effectuer ou non un traitement correspondant à cet événement.

La fonction de lecture de la file des événements est la suivante:

int XNextEvent(Display *display, XEvent *Evenement);

En entrée:

Nous ne présentons plus display...

Evènement: Union C. Contiendra l'événement envoyé par le serveur. L'événement sera supprimé de la file d'attente.

Image non trouvée !Pour éviter des erreurs, mettez "memset(&Evenement, 0, sizeof(XEvent));" avant de lire le message...

En sortie:

Le résultat est 0 si un événement a pu être prélevé.

Image non trouvée !Quand vous lancez cette fonction, celle-ci ne vous rendra la main que lorsqu'un événement sera à traiter !

 

Vérifier qu'il existe un événement à traiter dans la file des événements

Il existe donc une autre fonction qui va vous indiquer la présence ou non d'un événement à traiter, afin de ne pas être bloqué dans cette fonction XNextEvent () alors que vous pourriez faire autre chose !

int XPending(display)
Display *display;

Cette fonction retourne le nombre d'événements reçus du serveur, mais non retirés de la liste des événements (donc non traités ! équivalent de faire XEventsQueued() avec le mode QueuedAfterFlush).

 

Exemple

Lecture avec attente d'un événement sans extraction de celui-ci de la file