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
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
Bloque le thread en cours en attendant que le signal spécifié soit ouvert.
Exemple
// Création d'un signal
SignalCrée("Allez-y", signalAutomatique, 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> = SignalAttend(<Signal> [, <Durée maximale>])
<Résultat> : Entier
  • 1 si le thread a reçu le signal,
  • 0 dans le cas contraire (durée maximale écoulée).
<Signal> : Chaîne de caractères ou variable de type SignalAutomatique ou SignalManuel
  • Nom du signal à attendre. Si ce signal n'existe pas, le signal est automatiquement créé avec les options par défaut (mode automatique) et fermé.
  • WEBDEV - Code Serveur Nom de la variable de type SignalAutomatique correspondant au signal à attendre.
  • WEBDEV - Code Serveur Nom de la variable de type SignalManuel correspondant au signal à attendre.
<Durée maximale> : Entier optionnel ou Durée 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é, l'attente est infinie.
  • Si ce paramètre vaut 0, <Résultat> correspond à l'état du signal, sans se mettre en attente.
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.
Composante : wd300vm.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Fonction SignalAttend() - Correction ; Notes supplémentaires

1. Correction

Il y a une erreur dans l'explication du paramètre <Durée maximale>, quand il est renseigné à 0

La citation ci-dessous est erronée:

« Si ce paramètre vaut 0, <Résultat> correspond à l'état du signal »


Proposition de correction:

D'une manière générale, la fonction SignalAttend() retourne :
• Vrai si le signal est préalablement ouvert, ou s'il est ouvert durant le délai d'attente <Durée maximale>,
• Faux si le signal est encore fermé au terme du délai <Durée maximale>.

Si le paramètre <Durée maximale> vaut 0, il n'y a pas d'attente.


2. Notes supplémentaires

[A] L'ouverture du signal est effectuée par la fonction SignalModifie(), généralement exécutée dans un autre Thread. (ajouter un hyperlien directement vers cette fonction !!!)

[B] Quand le signal est ouvert, la fonction SignalAttend() peut avoir pour effet de le fermer.
• Si le mode de gestion du signal est Automatique, le signal est automatiquement fermé à la suite de l'exécution de la fonction SignalAttend().
• Si le mode de gestion du signal est Manuel, et qu'il est ouvert par SignalModifie(<nom du signal>,signalOuvertEtFermé), le signal est automatiquement fermé à la suite de l'exécution de la fonction SignalAttend().
=JBO=
22 nov. 2013

Dernière modification : 21/06/2023

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