EXEMPLE DE CODE D’EXECUTION DE TACHES PARALLELES AVEC WINDEV
[Déclaration Globales de la fenêtre]
gxCA_TOTAL est un numérique <section critique>
[Clic du bouton de la fenêtre ou se trouve la table TABLE_EXEMPLE]
TableSupprimeTout(TABLE_Exemple)
nLigne est entier
tabTaches est tableau de TâcheParallèle
stTache est une TâcheParallèle
// Rendre le champ invisible pour éviter des problèmes si un tri est effectué sur la table pendant le traitement
ChampInvisible(TABLE_Référence, animDéfilementBas, 10)
POUR TOUT CLIENT
// Ajout de la ligne dans la table avec le Nom du client et on récupère le numéro de la ligne ajoutées
nLigne = TableAjouteLigne(TABLE_Exemple, CLIENT.NomClient)
// Lance la tâche parallèle avec en paramètre le numéro du client et le numéro de la ligne de la table actuel
stTache = TâcheParallèleExécute(_Affiche_CA_Client,(CLIENT.NumClient,nLigne),tpoCopieLégèreContexteHFSQL)
// On ajoute la tache dans le tableau des taches parallèles, permettra d’afficher le total une fois toutes les tâches effectuées
Ajoute(tabTaches,stTache)
FIN
// Exécutera la fonction Afficher_Le_Total une fois toutes les taches parallèles effectuées
// ATTENTION ce n’est pas une fonction bloquante, c’est à dire que même si les tâches parallèles ne sont pas terminées
// la fonction info qui suit sera affichée à l’écran alors que la procédure Affiche_Le_Total n’a pas été exécutée car elle attend la fin de
// toutes les tâches parallèles exécutées dans la boucle.
TâcheParallèleExécuteAprèsToutes(tabTaches, Affiche_Le_Total,(),tpoThreadPrincipal)
Info(« Toutes les lignes de codes ont été interprétés, mais le traitement n’est peut-être pas terminé ! »)
[Procédure Locale]
// Récupère les informations d’un client et demande l’affichage des informations
// c’est cette procédure qui est parallélisée
PROCEDURE _Affiche_CA_Client(nNumClient, nLigne)
// Récupère le chiffre d’affaire du client
xCA est un numérique = Récupère_CA(nNumClient)
gxCA_TOTAL += xCA
// Affiche le CA du client dans le champ de la table, c’est un accès IHM, ça doit être fait dans le thread principal
ExécuteThreadPrincipal(_Afficher_La_Ligne,nLigne,xEncours)
[Procédure Locale]
PROCEDURE Récupère_CA(LOCAL nIDClient est un entier)
xCAtemp1 est un numérique
xCAtemp2 est un numérique
// Sauvegarde de la position dans le fichier
nPosition est un entier = HSauvePosition(CLIENT)
// recherche le client dans la base de données
HLitRecherchePremier(CLIENT,NumClient,nIDClient)
// Stocke son encours pour le renvoyer
xCAtemp1 = CLIENT.CA
// Retourne à la position d’origine
HRetourPosition(nPosition)
xCAtemp2 = Traitement_Metier_A_Effectuer(xCAtemp1) // fonction de traitement métier ou appel à un web service par exemple, c’est ici que les tâches parallèles vont faire gagner du temps …
RENVOYER xCAtemp2
[Procédure Locale]
// Permet d’afficher le CA du client dans la ligne de table correspondante
PROCEDURE _Affiche_La_Ligne(nLigne, xCA)
// Affiche le CA dans la table
TABLE_Exemple[nLigne].COL_CA = xCA
[Procédure Locale]
PROCEDURE Affiche_Le_Total()
ChampVisible(TABLE_Exemple ,animDéfilementHaut,50)
Info(« Terminé, le CA total est de » + NumériqueVersChaîne(gxCA_TOTAL, « 6,2fS ») + » € »)
0 commentaires