|
|
|
|
|
ExécuteThreadPrincipal (Fonction) En anglais : ExecuteMainThread Déclenche l'exécution d'une procédure par le thread principal de l'application.
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 :
|
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.
|
|
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
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|