Le thread en cours envoie un signal au thread spécifié pour le débloquer. Cette fonction permet de simplifier la synchronisation entre threads en évitant de mettre en place une gestion avancée des signaux.
Rappel :
- Un thread est un processus lancé en parallèle de l'application en cours ("thread" principal). Il est par exemple possible de lancer l'exécution d'une tâche en traitement de fond (sauvegarde, ...).
- Les fonctions ThreadAttendSignal et ThreadEnvoieSignal permettent de synchroniser les threads deux à deux.
// Création d'un signal
SignalCrée("Allez-y", signalManuel, signalFermé)
// Exécution d'un premier thread
ThreadExécute("Thread1", threadNormal, "Thread_Premier")
// Bloque le thread en cours jusqu'à l'obtention du signal
ThreadAttendSignal()
// Exécution d'un second thread
ThreadExécute("Thread2", threadNormal, "Thread_Second")
// Bloque le thread en cours jusqu'à l'obtention du signal
ThreadAttendSignal()
// Modifie le signal pour exécuter les threads
SignalModifie("Allez-y", signalOuvert)
//----------------------------------------------
PROCÉDURE Thread_Premier()
Trace(dbgInfo(dbgTraitement) + " - ThreadEnvoieSignal(threadPrincipal)")
ThreadEnvoieSignal(threadPrincipal)
SignalAttend("Allez-y")
Trace(dbgInfo(dbgTraitement) + " - Signal reçu")
//--------------------------------------------
PROCÉDURE Thread_Second()
Trace(dbgInfo(dbgTraitement) + " - ThreadEnvoieSignal(threadPrincipal)")
ThreadEnvoieSignal(threadPrincipal)
SignalAttend("Allez-y")
Trace(dbgInfo(dbgTraitement) + " - Signal reçu")
Syntaxe
Envoyer un signal à un thread identifié par son nom Masquer les détails
ThreadEnvoieSignal(<Nom du thread>)
<Nom du thread> : Chaîne de caractères
Nom du thread auquel le signal doit être envoyé. Pour envoyer un signal au thread principal, utilisez la chaîne de caractères "." ou la constante ThreadPrincipal.
Il est impossible d'envoyer un signal au thread courant.
Ce nom est donné lors de l'exécution du thread (fonction ThreadExécute).
Remarques
Synchronisation de threads
Les fonctions
ThreadAttendSignal et
ThreadEnvoieSignal permettent de synchroniser les threads deux à deux. Pour synchroniser plusieurs threads sur un même signal, il est nécessaire d'utiliser les fonctions de gestion d'un signal :
Remarque : Les mécanismes internes de gestion des files et des piles permettent de s'affranchir de la synchronisation des threads (fonctions
Enfile et
Défile pour les files, fonctions
Empile et
Dépile pour les piles).
Classification Métier / UI : Code neutre