DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des traitements / Threads, sémaphores, signaux et mutex
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
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 :
ThreadAttendSignalBloque le thread en cours jusqu'à ce qu'il reçoive un signal d'un autre thread.
ThreadEnvoieSignalLe 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.
Java En Java, les sémaphores, sections critiques et signaux sont uniques pour l'application qui les a créés. Ils ne peuvent pas être partagés entre plusieurs applications.
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).
WINDEVWEBDEV - Code ServeurUniversal Windows 10 AppiPhone/iPad Méthode 1 : Utilisation des types SignalAutomatique et SignalManuel.
Pour mettre en place une gestion des signaux avancée, les différentes étapes sont les suivantes :
  1. Création d'une variable de type SignalAutomatique ou de type SignalManuel. Par défaut, ce signal est fermé. Le signal est automatiquement détruit lors de la sortie de la portée de la variable correspondante.
  2. Attente du signal (fonction SignalAttend).
  3. Synchronisation des threads grâce aux fonctions SignalOuvre et SignalFerme.
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 :
  1. Création d'un signal (fonction SignalCrée). Par défaut, ce signal est fermé.
  2. Attente du signal (fonction SignalAttend).
  3. 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).
    • WINDEVWEBDEV - Code ServeurUniversal Windows 10 AppiPhone/iPad grâce aux fonctions SignalOuvre et SignalFerme.
  4. 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 :
SignalAttendBloque le thread en cours en attendant que le signal spécifié soit ouvert.
SignalCréeCrée un signal.
SignalDétruitDétruit explicitement un signal.
SignalFermeFerme un signal de synchronisation entre plusieurs threads.
SignalModifieModifie l'état d'un signal.
SignalOuvreOuvre un signal de synchronisation entre plusieurs threads.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 21/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale