PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

PV

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
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.
Remarque : 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é.
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.
// 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
<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

Attente infinie

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).

Divers

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.
Composante : wd280vm.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire