DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des traitements / Tâches parallèles
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 tâche parallèle.
// Utilisation de la syntaxe 1 
t1 est une TâcheParallèle = TâcheParallèleExécute(ProcédureA, (), tpoThreadPrincipal)
// Utilisation de la syntaxe 2 
t1 est une TâcheParallèle
t1.Procédure = Procédure3
t2 est une TâcheParallèle = TâcheParallèleExécute(t1)
// Utilisation de la syntaxe 3 
t3 est une Description de TâcheParallèle
t3.Procédure = Procédure3
TâcheParallèleExécute(t3)
// Utilisation de la syntaxe 3 
t3bis est une Description de TâcheParallèle
t3bis.Procédure = Procédure3bis
t3bis.Paramètre[1] = DateDuJour()
t3bis.Paramètre[2] = HeureSys()
TâcheParallèleExécute(t3bis)
// Déclaration de plusieurs tâches et exécution d'un traitement à la fin de toutes ces tâches
MaDescriptionTâche est une Description de TâcheParallèle
tabMesTâches est un tableau de TâcheParallèle // Résultat des fonctions tâches parallèles 
// Tâche N°1
MaDescriptionTâche.Procédure = Exemple2_Etape1
// Exécute les tâches parallèles
// On ajoute la tâche renvoyée à un tableau de tâches 
// pour pouvoir les réutiliser dans la fonction TâcheParallèleExécuteAprèsToutes
Ajoute(tabMesTâches, TâcheParallèleExécute(MaDescriptionTâche))
// Tâche N°2
MaDescriptionTâche.Procédure = Exemple2_Etape2
Ajoute(tabMesTâches, TâcheParallèleExécute(MaDescriptionTâche))
// On donne la procédure à exécuter une fois que 
// toutes les tâches contenues dans le tableau tabMesTâches sont terminées
TâcheParallèleExécuteAprèsToutes(tabMesTâches, Exemple2_Fin, (), tpoThreadPrincipal)
Syntaxe

Exécuter une tâche parallèle Masquer les détails

<Résultat> = TâcheParallèleExécute(<Procédure> [, <Paramètres> [, <Options>]])
<Résultat> : Variable de type TâcheParallèle
Variable de type TâcheParallèle correspondant à la tâche à exécuter.
<Procédure> : Chaîne de caractères ou variable de type Procédure
Procédure à exécuter. Ce paramètre peut correspondre :
  • au nom de la procédure à exécuter.
  • au nom de la variable de type Procédure correspondant à la procédure à exécuter.
<Paramètres> : Liste de valeurs entre parenthèses et séparées par des virgules
Paramètres de la procédure à exécuter. Cette liste de paramètres est de la forme :
(<Paramètre 1>, ..., <Paramètre N>)
où :
  • <Paramètre 1> : Premier paramètre de la procédure.
  • ...
  • <Paramètre N> : Nième paramètre de la procédure.
Attention : Les paramètres sont passés par valeur. Dans le cas de variables de types complexes (tableaux, objet), la valeur est l'élément lui-même. Pour protéger l'accès à cette variable, il est possible d'utiliser une des solutions suivantes :
  • faire une copie de la variable (avec le mot clé LOCAL),
  • utiliser des sections critiques (avec la fonction WLangage SectionCritiqueDebut ou l'attribut <section critique>)
<Options> : Constante ou combinaison de constantes optionnelle de type Entier
Options de la tâche à exécuter :
tpoCopieComplèteContexteHFSQLProvoque la copie immédiate du contexte HFSQL courant.
Conseillé par exemple si la tâche parallèle doit tenir compte des positions en cours dans les fichiers et requêtes du contexte de l'appelant.
tpoCopieDifféréeContexteHFSQL
(Valeur par défaut)
Provoque une copie légère du contexte HFSQL lors du premier accès aux données HFSQL.
tpoCopieLégèreContexteHFSQLProvoque la copie immédiate d'une partie du contexte HFSQL courant.
Seuls les répertoires où se trouvent les fichiers de données en HFSQL Classic et/ou les connexions en HFSQL Client/Serveur sont mémorisés.
tpoThreadPrincipalExécute la tâche dans le thread principal.
Cette constante peut être combinée avec une des autres constantes. Attention : Cette constante ne peut pas être utilisée pour exécuter une tâche parallèle dans le thread principal depuis le thread principal.

Remarque : Pour savoir quel type de copie choisir, consultez le comparatif des différents modes de copie.

Exécuter une tâche parallèle déjà décrite (variable de type TâcheParallèle) Masquer les détails

<Résultat> = TâcheParallèleExécute(<Tâche>)
<Résultat> : Variable de type TâcheParallèle
Variable de type TâcheParallèle correspondant à la tâche exécutée.
<Tâche> : Variable de type TâcheParallèle
Nom de la variable de type TâcheParallèle correspondant à la tâche à exécuter.
Attention : Si la tâche est déjà en cours d'exécution ou a déjà été exécutée, une erreur WLangage sera provoquée.

Exécuter une tâche parallèle connue par sa description (variable de type Description de TâcheParallèle) Masquer les détails

<Résultat> = TâcheParallèleExécute(<Description tâche>)
<Résultat> : Variable de type TâcheParallèle
Variable de type TâcheParallèle correspondant à la tâche exécutée.
<Description tâche> : Variable de type Description de TâcheParallèle
Nom de la variable de type Description de TâcheParallèle décrivant la tâche à exécuter.
Remarques
  • La tâche est enregistrée dans la file d'attente des tâches à exécuter.
  • La fonction TâcheParallèleExécute n'est pas bloquante et n'attend pas la fin de la tâche.
  • Comparatif des différents types de copie du contexte HFSQL :
    Type de copieAvantagesInconvénients
    Copie complèteCopie :
    • les paramètres de connexion au sens large (connexions, chemins physiques, ...).
    • les positions, les filtres, ... définis sur les fichiers de données.
    • les requêtes.
    Consommation mémoire (sur le client et sur le serveur).
    Copie légèreCopie les paramètres de connexion au sens large (connexions, chemins physiques, ...).
    Pas de consommation mémoire sur le poste Serveur.
    Les enregistrements et les filtres en cours ne sont pas copiés. Il est donc nécessaire de repositionner les enregistrements par la fonction HLitRecherche par exemple.
    Pas de copie des requêtes.
    Consommation mémoire sur le poste Client
    Copie différéePas de consommation mémoire (sur le client et sur le serveur). Risque : Si les paramètres de connexion au sens large sont modifiés, la dernière modification sera prise en compte.
    Les enregistrements et les filtres en cours ne sont pas copiés. Il est donc nécessaire de repositionner les enregistrements par la fonction HLitRecherche par exemple.
    Pas de copie des requêtes.

En règle générale, la copie différée est conseillée à condition de ne pas changer les paramètres de connexion et de refaire les HLitRecherche nécessaires.
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.
Composante : wd300vm.dll
Version minimum requise
  • Version 20
Documentation également disponible pour…
Commentaires
Souci mémoire
Cette fonction consomme excessivement de mémoire et surtout ne la libère pas une fois les tâches parallèles terminées. Utilisation avec tpoCopieDifféréeContexteHFSQL...
Didier J
12 déc. 2023
Procédure uniquement
Une précision, seules les procédures peuvent être éxécutées. Pour éxécuter une méthode encapsulée dans un objet, il faut créer une procédure qui exécutera la méthode
Hervé Franco
27 avr. 2017

Dernière modification : 07/05/2024

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