|
|
|
|
|
- Attente infinie
- Synchronisation de threads
- Divers
ThreadAttendSignal (Fonction) En anglais : ThreadWaitSignal Bloque le thread en cours jusqu'à la réception d'un signal envoyé par un autre thread. Cette fonction permet de simplifier la synchronisation entre threads en évitant de mettre en place une gestion avancée des signaux. Remarques : - Cette fonction est équivalente à la fonction SignalAttend avec un signal automatique pour un signal envoyé par la fonction ThreadEnvoieSignal. Le signal est donc automatiquement refermé.
- Le blocage cesse immédiatement (sans attendre la durée maximale) si une demande d'arrêt du thread est faite par un autre thread grâce à la fonction ThreadDemandeArrêt.
Rappels : - 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.
SignalCrée("Allez-y", signalManuel, signalFermé)
ThreadExécute("Thread1", threadNormal, "Thread_Premier")
ThreadAttendSignal()
ThreadExécute("Thread2", threadNormal, "Thread_Second")
ThreadAttendSignal()
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
<Résultat> = ThreadAttendSignal([<Durée maximale>])
<Résultat> : Booléen - Vrai si le thread courant a reçu un signal,
- Faux si le thread n'a pas reçu de signal (la durée maximale s'est écoulée).
<Durée maximale> : Entier optionnel, Durée optionnelle ou constante optionnelle Nombre de centièmes de seconde d'attente maximale. - Si à la fin de la durée spécifiée, le thread n'a pas reçu de signal, <Résultat> est égal à Faux.
- Si ce paramètre n'est pas spécifié ou correspond à la constante Infini, l'attente est infinie.
Ce paramètre peut correspondre à : - un entier correspondant au nombre de centièmes de seconde,
- une variable de type Durée,
- l'indication directe de la durée (par exemple 1 s ou 10 ms).
Remarques Il est possible de terminer l'exécution d'un thread même si celui-ci est bloqué dans une attente infinie d'un signal. Il suffit d'utiliser la fonction ThreadArrête. 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). La fonction ThreadAttendSignal peut être utilisée dans un traitement lié à un champ (code de clic d'un bouton par exemple) : elle est alors utilisée dans le thread principal.
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|