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
  • Fonctionnement
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
Déclenche l'exécution d'une procédure par le thread principal de l'application.
Exemple
// Interagir avec l'utilisateur 
UneRéponse est une chaîne 
UneRéponse = ExécuteThreadPrincipal(ProcédureInteractionUtilisateur, "Message")
Syntaxe
<Résultat> = ExécuteThreadPrincipal(<Procédure WLangage> [, <Paramètre 1> [... [, <Paramètre N>]]])
<Résultat> : Chaîne de caractères
Valeur de retour de la procédure appelée. Cette valeur est identique à la valeur obtenue si la procédure est directement lancée.
<Procédure WLangage> : Nom de procédure
Nom de la procédure à exécuter.
<Paramètre 1> : Optionnel
Paramètres à passer à la procédure. Attention : ces paramètres sont passés par valeur (et non par référence).
<Paramètre N> : Optionnel
Paramètres à passer à la procédure. Attention : ces paramètres sont passés par valeur (et non par référence).
Remarques

Fonctionnement

L'exécution de la procédure est effectuée par le thread principal lorsque celui-ci est en attente d'interactions avec l'utilisateur.
Lorsque le thread principal d'une application doit exécuter des procédures appelées par ExécuteThreadPrincipal, il faut donc respecter des règles strictes :
  • le thread principal doit être hautement disponible : sections critiques très courtes et très localisées, pas de traitement long lorsqu'un thread secondaire peut avoir besoin d'appeler la fonction ExécuteThreadPrincipal, pas d'attente d'objet de synchronisation (sémaphores, signaux, etc.).
  • l'appel à la fonction ExécuteThreadPrincipal depuis les threads doit se faire en évitant de "tenir" des objets de synchronisation (sections critiques, sémaphores, signaux, etc.) pour éviter un interblocage (deadlock).
Si le thread principal est en cours d'exécution d'un traitement, ce traitement n'est pas interrompu et la procédure sera exécutée lorsque le thread principal repassera en attente d'interaction avec l'utilisateur.
La fonction Multitâche permet toutefois d'interrompre un traitement long pour traiter les actions de l'utilisateur et exécuter les procédures appelées par la fonction ExécuteThreadPrincipal.
L'appel de la fonction ExécuteThreadPrincipal est bloquant tant que le thread principal n'a pas exécuté la procédure.
Attention :
  • La fonction ExécuteThreadPrincipal ne permet pas d'appeler une procédure d'un contexte d'exécution "parent". Par exemple, il n'est pas possible d'appeler une procédure du projet depuis un composant externe.
  • Les erreurs et les exceptions provenant de la procédure exécutée sont remontées dans le thread appelant au niveau de l'appel de la fonction ExécuteThreadPrincipal.
  • Le contexte HFSQL utilisé correspond au contexte de l'élément d'origine auquel appartient la procédure appelée :
    • dans le cas d'une procédure d'une fenêtre, le contexte HFSQL de la fenêtre est utilisé (contexte indépendant ou non, selon l'option choisie dans la fenêtre de description).
    • dans le cas d'une procédure globale, le contexte HFSQL du projet est utilisé.
Liste des exemples associés :
Utilisation des tâches parallèles Exemples unitaires (WINDEV) : Utilisation des tâches parallèles
[ + ] Les tâches parallèles permettent notamment d’accélérer les temps de traitement et d'améliorer la réactivité d’une application.
Cet exemple présente les fonctions et types de variables nécessaires à l'utilisation des tâches parallèles :
- exécution de tâches parallèles,
- interaction avec les champs,
- tâches de continuation.
WD ThreadUI Exemples didactiques (WINDEV) : WD ThreadUI
[ + ] L'utilisation de threads ou de tâches parallèles est très souvent obligatoire afin de répondre au besoin de rapidité des utilisateurs.
Avec le WLangage de WINDEV, le lancement de traitements en tâche de fond est simplifié à l'extrême avec :
- les fonctions de gestion des threads,
- le type Thread,
- les tâches parallèles.
Mais attention, s'il est facile de lancer un traitement en arrière plan, il faut néanmoins être précautionneux sur l'UI de l'application : seuls les traitements exécutés dans le thread principal sont autorisés à mettre à jour l'interface (affecter un champ, remplir une liste, combo, table, zone répétée...).
Cet exemple vous montre 4 façons de mettre à jour l'UI de vos applications avec des données provenant de threads secondaires.
Classification Métier / UI : Code neutre
Composante : wd300vm.dll
Version minimum requise
  • Version 17
Documentation également disponible pour…
Commentaires
Equivalent de ExécuteThreadPrincipal en configuration Java
Astuce : en configuration Java, depuis la version 23 de Windev, il est possible d'exécuter une procédure dans le thread principal en utilisant la constante tpoThreadPrincipal en 3ème argument de la fonction TâcheParallèleExécute(). Voir la documentation détaillée ici : https://doc.pcsoft.fr/?1000021211&verdisp=230
Jean
30 déc. 2018

Dernière modification : 04/09/2024

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