|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Débuté par S.KANTE, 17 jan. 2018 14:18 - 12 réponses |
| |
| | | |
|
| |
Membre enregistré 5 messages |
|
| Posté le 17 janvier 2018 - 14:18 |
Bonjour tout le monde
J'ai actuellement un souci qui me casse vraiment la tête et j'ai besoin de vos aides. Mon problème est le suivant: je suis sur un projet dans lequel il est nécessaire d'utiliser le parallélisme des traitements. j'ai des répertoires dans lesquels se trouvent des milliers de fichier organisés, il est question que l'utilisateur sélectionne un répertoire pour afficher son contenu. Présentement tout marche bien mais l'affichage est lent , alors j'ai utilisé la notion de traitement parallèle pour pouvoir optimiser le traitement, mais je n'arrive pas, aider moi svp. Merci d'avance.
mes code:
PROCEDURE Fonction_liste_fichier(chemin_rep est une chaîne) ResListeFichier = fListeFichier(chemin_rep+"\*.pdf*",frNonRécursif)
SI ResListeFichier > 0 ALORS nbfichier = 1 + ChaîneOccurrence(ResListeFichier, RC) FIN RENVOYER ResListeFichier
sListefichier sont des chaînes sListefichier=Fonction_liste_fichier(Chemin_classeur) ResListeFichier=Fonction_liste_fichier(Chemin_classeur)
POUR TOUTE CHAÎNE UnFichier DE ResListeFichier SEPAREE PAR RC soit t est une TâcheParallèle =TâcheParallèleExécute(fonction_extrait_chaine,(UnFichier),tpoCopieLégèreContexteHFSQL) TâcheParallèleExécuteAprès(t,procedure_Afficher_table,(ValeurRenvoyéeTâchePrécédente,UnFichier),tpoThreadPrincipal) PROCEDURE INTERNE procedure_Afficher_table(Fic,fichier est une chaîne) TableAjouteLigne(TABLE_fichier_importation_contenu,"",Fic,fTaille(fichier),fichier) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 996 messages |
|
| Posté le 17 janvier 2018 - 14:22 |
Bonjour,
enleve tpoThreadPrincipal de
TâcheParallèleExécuteAprès(t,procedure_Afficher_table,(ValeurRenvoyéeTâchePrécédente,UnFichier),tpoThreadPrincipal)
jordan |
| |
| |
| | | |
|
| | |
| |
| Posté le 17 janvier 2018 - 16:39 |
Bonjour, Tu as déjà posé cette question, à laquelle j'ai répondu. Qu'est-ce qui ne va pas avec ma précédente réponse ?
Frédéric.
"S.KANTE" a écrit dans le message de groupe de discussion : 20185044c75e9d5c666ff1d818295edd0f7e@news.pcsoft.fr...
Bonjour tout le monde
J'ai actuellement un souci qui me casse vraiment la tête et j'ai besoin de vos aides. Mon problème est le suivant: je suis sur un projet dans lequel il est nécessaire d'utiliser le parallélisme des traitements. j'ai des répertoires dans lesquels se trouvent des milliers de fichier organisés, il est question que l'utilisateur sélectionne un répertoire pour afficher son contenu. Présentement tout marche bien mais l'affichage est lent , alors j'ai utilisé la notion de traitement parallèle pour pouvoir optimiser le traitement, mais je n'arrive pas, aider moi svp. Merci d'avance.
mes code:
PROCEDURE Fonction_liste_fichier(chemin_rep est une chaîne) ResListeFichier = fListeFichier(chemin_rep+"\*.pdf*",frNonRécursif)
SI ResListeFichier > 0 ALORS nbfichier = 1 + ChaîneOccurrence(ResListeFichier, RC) FIN RENVOYER ResListeFichier
sListefichier sont des chaînes sListefichier=Fonction_liste_fichier(Chemin_classeur) ResListeFichier=Fonction_liste_fichier(Chemin_classeur)
POUR TOUTE CHAÎNE UnFichier DE ResListeFichier SEPAREE PAR RC soit t est une TâcheParallèle =TâcheParallèleExécute(fonction_extrait_chaine,(UnFichier),tpoCopieLégèreContexteHFSQL) TâcheParallèleExécuteAprès(t,procedure_Afficher_table,(ValeurRenvoyéeTâchePrécédente,UnFichier),tpoThreadPrincipal) PROCEDURE INTERNE procedure_Afficher_table(Fic,fichier est une chaîne) TableAjouteLigne(TABLE_fichier_importation_contenu,"",Fic,fTaille(fichier),fichier) FIN
FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
| Posté le 17 janvier 2018 - 17:13 |
| excusez moi je n'avais pas vu ta reponse |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
| Posté le 17 janvier 2018 - 17:22 |
si je l'enlev voici ce qu'il m'affiche:
Erreur à la ligne 62 du traitement Procédure interne procedure_Afficher_table. Le champ 'TABLE_fichier_importation_contenu' est inconnu.
**********************************************
----- Informations techniques -----
Appel WL : Traitement de 'Procédure interne procedure_Afficher_table' (FEN_importation.TABLEH_importation), ligne 62, thread 0
Que s'est-il passé ? Le champ 'TABLE_fichier_importation_contenu' est inconnu.
Code erreur : 1017 Niveau : erreur fatale
Dump de l'erreur du module 'wd220vm.dll' (22.0.318.0). Identifiant des informations détaillées (.err) : 1017 Informations supplémentaires : EIT_PILEWL : Procédure interne procedure_Afficher_table (FEN_importation.TABLEH_importation), ligne 62 EIT_DATEHEURE : 17/01/2018 16:24:32 EIT_TYPE_WDFILE : <2> EIT_IDCODE : <33> |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 949 messages |
|
| Posté le 18 janvier 2018 - 18:54 |
Coucou,
1) tpoCopieLégèreContexteHFSQL Dans ton cas non, place un tpoCopieDifféréeContexteHFSQL https://doc.pcsoft.fr/?1000021211
2) Moi je ferais dans ce style
MaDescriptionTâche est une Description de TâcheParallèle tabMesTâches est un tableau de TâcheParallèle
MaDescriptionTâche..Procédure = Exemple2_Etape1
Ajoute(tabMesTâches, TâcheParallèleExécute(MaDescriptionTâche))
MaDescriptionTâche.Procédure = Exemple2_Etape2 Ajoute(tabMesTâches, TâcheParallèleExécute(MaDescriptionTâche))
TâcheParallèleExécuteAprèsToutes(tabMesTâches, Exemple2_Fin, (), tpoThreadPrincipal)
Reference: https://doc.pcsoft.fr/?1000021211
Tu place la mise a jour de ta table dans la procedure : "Exemple2_Fin"
Tu peut regarder sur coté de l'example unitaire :
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. Reference: https://doc.pcsoft.fr/?1000021211
Si tu as besoin de plus d'info reposte et on en discute.
-- In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
| Posté le 19 janvier 2018 - 10:10 |
Bonjour Je remercie tous les amis qui ont contribué à la résolution de ce problème. Le problème est finalement résolu en utilisant les threads. l'utilisateur peut maintenant afficher plus de 2000 fichiers sans bloquer l'interface. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
| Posté le 19 janvier 2018 - 11:51 |
Bonjour Avec la fonction "fListeFichier" je remarque un retard de 3 à 5 seconde lors que le nombre de fichier atteins 1000 fichiers. il y'a t-il une autre méthode ou plus performante ? Svp. merci d'avance. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 949 messages |
|
| Posté le 19 janvier 2018 - 17:02 |
Coucou,
Tu peut essayer passer par un assembly dotnet
PUBLIC static string[] GetFiles( string path, string searchPattern ) Retourne les noms des fichiers (y compris leurs chemins d'accès) qui correspondent au modèle de recherche spécifié dans le répertoire spécifié. Reference: https://msdn.microsoft.com/fr-fr/library/wz42302f(v=vs.110).aspx
-- In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier. |
| |
| |
| | | |
|
| | |
| |
| Posté le 19 janvier 2018 - 18:11 |
Merci bien mon ami Je suis en windev |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 949 messages |
|
| Posté le 19 janvier 2018 - 18:29 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 281 messages |
|
| Posté le 19 janvier 2018 - 20:17 |
Bonsoir,
fListeFichier doit être utilisé avec une fonction callback car si il y a beaucoup de fichiers il faut le temps nécessaire pour alimenter la chaine. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 9 messages |
|
| Posté le 16 mai 2025 - 11:01 |
Bonjour, Je rencontre le même souci mais en WEBDEV. J'ai un formulaire de saisie que j'aimerai enregistrer toutes les x secondes (Comme ce que fait Word) J'ai essayé le code ci-dessous mais j'ai un message d'erreur lorsque je souhaite récupérer la valeur d'un champ pour l'ajout dans la BDD.
MaDescriptionTâche est une Description de TâcheParallèle tabMesTâches est un tableau de TâcheParallèle
// Tâche N°1 MaDescriptionTâche..Procédure = pl_lance_TIMER //Lance un chrono de x seconde
Ajoute(tabMesTâches, TâcheParallèleExécute(MaDescriptionTâche))
//A la fin du chrono lance la procédure qui sauvegarde dans la BDD les informations de la page TâcheParallèleExécuteAprèsToutes(tabMesTâches, pl_enregistre_TMP, (), tpoCopieDifféréeContexteHFSQL)
Savez-vous comment résoudre le problème ? |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|