PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Tâche Paralléle (Threads)
Tâche Paralléle (Threads)
Débuté par Aiden Svosve, 18 juin 2021 19:22 - 5 réponses
Membre enregistré
59 messages
Posté le 18 juin 2021 - 19:22
Bonjour à toutes et à tous,
J'ai besoin de vos lumières d'experts pour un soucis qui m'arrache le peu de cheveux qui me reste... je doit effectuer une tache paralléle dans une zone répétée remplit avec une requête afin d'améliorer la performance.

j'ai une ZR qui reçoit en moyenne 40 enregistrements par jours. je voulais dés que l'utilisateur accede sur page ZR lui fait patienter quelques secondes afin de charger quelques enegistrements...Voici comment j'ai procédé et rien ne se passe.

Déclaration Globale de FEN_Zr
PROCÉDURE FEN_Zr()
refresh()

Initilialisation
HExécuteRequête(REQ_Zr)
ZoneRépétéeAffiche(ZR_REQ_Zr,taDébut)

PROCÉDURE Update()
FEN_Zr..Plan = 1
BTN_Bouton..Visible = 1

PROCÉDURE develop()
HExécuteRequête(REQ_Zr)
ZoneRépétéeAffiche(ZR_REQ_Zr,taDébut)
ExecuteMainThread(Update)

PROCÉDURE refresh()
FEN_Zr..Plan = 2
BTN_Bouton..Visible = 0
SI ThreadState("filtre") <> threadNormal ALORS
RETOUR
FIN
ThreadExécute("filtre",threadNormal,develop)

NB: Dans ma fénétre j'ai deux plans, (Plan 1 : ZR et Plan 2 : image avec jauge ) et J'utilise WM 25, projet Android,
Aprés plusieurs documentations et forums j'ai toujours pas de solution. Merci de votre collaboration mes chéres !
Posté le 18 juin 2021 - 23:33
d'après le code, la ZR est liée à la requête.

Il est donc complètement inutile d'exécuter la requête avant de faire un zonerepeteeaffiche, la ZR s'en chargera... Par contre, pour recharger, il faut simplement un zonerepeteaffiche avec un paramètre tareexecuterequte

Finalement, le problème avec le thread : AUCUN thread SECONDAIRE n'a le DROIT d'agir sur l'interface utilisateur (pas d'appel a zonerepeteeaffiche dans un thread secondaire, donc, ce que tu essaye de faire)

A la place , il faut appeler la fonction spéciale ExécuteThreadPrincipal pour exécuter une procédure qui ELLE se fait dans le thread principal et fera l'affichage

Comme en plus avec un threadnormal, le cotexte HF est COPIE dans le thread secondaire, l'exécution de la requête dans le thread secondaire pour afficher dans le principal ne fonctionnera pas

A la place, je suggère de faire une ZR remplie par programmation, ce qui permettra d'exécuter la requête dans un thread secondaire, de boucler dessus dans le thread secondaire et dans cette boucle d'appeler par threadexecuteprincipal une procédure avec paramètres qui fera l'ajout dans la zr en fonction des paramètres reçus
Membre enregistré
59 messages
Posté le 19 juin 2021 - 09:02
Merci @Argus de ta collaboration, effectivement la requete etait executée 2 fois. Merci de ta suggestion seulement avec mon projet il me faut ce remplissage via requête et avec programmation l'appli présente beaucoup de latence.

Pour les Threads vraiment mon probléme depuis des semaines sans solution. j'ai bien compris le principe et comment proceder à l'execution de ces threads (via requête) ? Pouvez vous m'aidez avec un exemple de code Svp !, je suis vraiment perdu pour cette execution.

Merci encore de votre soutien.
Membre enregistré
59 messages
Posté le 19 juin 2021 - 22:18
Je fais un "Up" espérant toujours une aide Svp, j'ai pu changé quelques code avec les idées de Argus mais le probléme est toujours persistant.
Dans ma ZR voici quelques modifications effectuées.

Déclaration Globale de FEN_Zr
PROCÉDURE FEN_Zr()
refresh()

Initilialisation
ZoneRépétéeAffiche(ZR_REQ_Zr,taRéExécuteRequete)

PROCÉDURE Update()
FEN_Zr..Plan = 1
BTN_Bouton..Visible = 1

PROCÉDURE develop()
ZoneRépétéeAffiche(ZR_REQ_Zr,taRéExécuteRequete)
ExécuteThreadPrincipal(Update)

PROCÉDURE refresh()
FEN_Zr..Plan = 2
BTN_Bouton..Visible = 0
SI ThreadState("filtre") <> threadNormal ALORS
RETOUR
FIN
ThreadExécute("filtre",threadNormal,develop)

Merci de votre aide !
Posté le 20 juin 2021 - 00:39
> Je fais un "Up" espérant toujours une aide Svp, j'ai pu changé quelques code avec les idées de Argus mais le probléme est

Nope... tu n'as certainement pas appliqué ce que je t'ai dis

j'ai dis:
A la place, je suggère de faire une ZR remplie par programmation, ce qui permettra d'exécuter la requête dans un thread secondaire, de boucler dessus dans le thread secondaire et dans cette boucle d'appeler par threadexecuteprincipal une procédure avec paramètres qui fera l'ajout dans la zr en fonction des paramètres reçus

Or:
1. ta zr est toujours liée à la requete
2. tu fais toujours l'exécution de la requete dans un thread secondaire en espérant que par miracle la zr du thread principal qui est dans un contexte différent, soit mise à jour

Donc, relis le texte ci dessus et fais ce que je décris si tu veux que ca fonctionne
Membre enregistré
59 messages
Posté le 20 juin 2021 - 13:52
@Argus merci de ta proposition oui j'ai bien compris le principe de A à Z, d'ailleurs j'ai fais ce que t'a dit avec le remplissage par programation et l'execution dans le thread secondaire mais toujours pas de réponse, avec les Thraeds c'est vraiment du nouveau pour moi malgrés plusieurs documentations'(PcSoft) et recherches dans les forums, j'arrive toujours pas l'adapter avec mon projet.

je lache l'affaire car vraiment ça me tourne la tête. Merci quand même d'avoir intervenir.