Exemple Taches Parallèles

par | Mai 15, 2016 | PC Soft, Windev | 0 commentaires

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

Soumettre un commentaire