|
|
|
|
|
- Présentation
- Gestion simple des signaux
- Principe
- Exemple : Application gérant un correcteur d'orthographe
- Fonctions du WLangage
- Remarque
- Gestion avancée des signaux
- Principe
- Mise en place
- Les fonctions de gestion des signaux avancés
Synchroniser des threads à l'aide de signaux
Les signaux permettent de synchroniser les différents threads d'une application. Un thread peut ainsi attendre l'exécution d'un thread. Le WLangage propose deux modes de gestion des signaux :
Gestion simple des signaux Principe Deux threads s'exécutent en parallèle (un thread principal et un thread secondaire par exemple). Un des threads attend une action spécifique du second thread pour pouvoir s'exécuter. Exemple : Application gérant un correcteur d'orthographe Lorsque l'utilisateur saisit le caractère ESPACE dans un champ de saisie, le correcteur orthographique est automatiquement lancé sur le mot précédent. Dans ce cas, la correction orthographique est gérée dans un thread secondaire. A chaque appui sur la touche ESPACE, le thread principal envoie un signal au thread secondaire afin de lancer le correcteur d'orthographe. Le code d'une telle application est le suivant : - Code du thread principal :
SI Droite(SAI_Saisie1, 1) = " " ALORS ThreadEnvoieSignal("ThreadCorrection") FIN
- Code du thread secondaire (ThreadCorrection) :
BOUCLE SI ThreadAttendSignal() = Vrai ALORS Â LanceCorrection() FIN FIN
Fonctions du WLangage Les fonctions suivantes permettent de réaliser une gestion simple des signaux :
| | ThreadAttendSignal | Bloque le thread en cours jusqu'à ce qu'il reçoive un signal d'un autre thread. | ThreadEnvoieSignal | Le thread en cours envoie un signal au thread spécifié pour le débloquer. |
Remarque Les sémaphores et les signaux sont des objets du système identifiés par leur nom. Ils sont donc partagés entre toutes les applications qui s'exécutent sur un poste. Deux applications (ou deux instances de la même application) utilisent donc les mêmes objets si elles utilisent le même nom. Pour créer des noms uniques, utilisez par exemple la fonction Instance pour mettre en place le nom voulu. Gestion avancée des signaux Principe Une gestion avancée des signaux consiste à communiquer entre plusieurs threads (plus de 2 threads). Certains threads sont en attente d'une tâche réalisée par le thread principal. Lorsque le thread principal réalise cette tâche, il envoie un signal à tous les threads secondaires. Mise en place Pour mettre en place une gestion des signaux avancée, deux méthodes sont disponibles : - Utilisation des types SignalAutomatique et SignalManuel.
- Utilisation des signaux nommés (méthode conseillée pour gérer les options de partage du signal).
Méthode 2 : Utilisation des signaux nommés (méthode conseillée pour gérer les options de partage du signal) Pour mettre en place une gestion des signaux avancée, les différentes étapes sont les suivantes : - Création d'un signal (fonction SignalCrée). Par défaut, ce signal est fermé.
- Attente du signal (fonction SignalAttend).
- Synchronisation des threads :
- grâce à la fonction SignalModifie : le signal est ouvert. Tous les threads en attente sont débloqués et le signal est automatiquement refermé (fonctionnement par défaut).
- grâce aux fonctions SignalOuvre et SignalFerme.
- Destruction du signal (fonction SignalDétruit).
Les fonctions de gestion des signaux avancés Les fonctions du WLangage spécifiques à la gestion des signaux avancés sont les suivantes :
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|