PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 22 → Attendre thread
Attendre thread
Débuté par Monsieur AURAY-LORIVAL, 15 mai 2017 03:06 - 5 réponses
//hostimage.webdev.info/avatars/tLdYli8XgIdG6buDKmkuA
Membre enregistré
41 messages
Posté le 15 mai 2017 - 03:06
Bonjour,

J'exécute 3 thread en même temps dont deux qui à la fin de leur traitement font un executethreadprincipal() pour mettre à jour mon interface.
Tout marche très bien mais en plus de ça je voudrai qu'une fois les 3 thread terminés, faire une modification dans mon interface. Comment faire pour être sûr que les 3 thread sont terminés ?

Merci à vous
//hostimage.webdev.info/avatars/VJnmMiRgXy6xNAavCvW3bQ
Membre enregistré
23 messages
Posté le 15 mai 2017 - 07:58
Bonjour,

Tu pourrais avoir un compteur global initialisé à 3.
Tes threads appelleraient une fonction global du style :
Procedure fctGlobal
cmptGlobal-=1
SI cmptGlobal>0 ALORS RETOUR

Ton code pour mettre à jour ton interface
//hostimage.webdev.info/avatars/tLdYli8XgIdG6buDKmkuA
Membre enregistré
41 messages
Posté le 16 mai 2017 - 00:47
Merci beaucoup, ça à marché super !
J'ai un autre problème mais lié aux mêmes threads donc je pose la problématique ici.

Quand j'arrive sur la fenêtre les 3 thread se lance, problème si je reviens sur la fenêtre précedente avant la fin d'exécution des threads, à un moment j'obtiens l'erreur comme quoi il ne trouve pas l'élément Img_profil ce qui est normal car j'ai changé de fenêtre.
Du coup, comment arrêté les threads dès lors que je reviens sur la fenêtre précédente ?

Merci
Message modifié, 16 mai 2017 - 01:17
//hostimage.webdev.info/avatars/8zWSAZEAfDyBpnod1ClA
Membre enregistré
112 messages
Posté le 16 mai 2017 - 10:01
Coucou,

les Tâches parallèles ?

https://doc.pcsoft.fr/?1000021229
// Indique une tâche parallèle de continuation qui sera exécutée lorsque toutes les tâches d'un tableau de tâches parallèles seront terminées.
https://doc.pcsoft.fr/?1000021217&name=tacheparalleleexecuteaprestoutes_fonction


Mais au malheur, cela ne fonctionne pas sous Android ?? (j suis vraimment Windev, Windev Mobile j'ai arreter lorsque j'ai voulu importer mon code MVP WM21 ... -S)

SInon tu as ChampExiste pour verifie que ton champs existe et "tuer" tout seul le thread ?

https://doc.pcsoft.fr/?3025035


Ou alors tu peut passer pas un Signal
https://doc.pcsoft.fr/?3077018


Donc tu envoie un signal qui va demander a tes thread de s interompre "du coup proprement, pas en les tuants dans l'oeuf"
Et tu peut placer le code dans la procedure de changement de fenetre / plan / n'importe, via ..Avant

https://doc.pcsoft.fr/?1000018907


p est une Procedure
p = MaProcédure
p..Après = MaProcédureAppeléeAprès
p..Avant = MaProcédureAppeléeAvant


Les variables globales, je suis trés méchiant, me faut 10 bonnes raison pour en crée une.

Et tips tu as ThreadEtat qui permet de savoir on en sont tes threads

https://doc.pcsoft.fr/?3077016&name=threadetat_fonction


T'as plein d'options differente, j suis sur que tu vas de debrouiller :)

--
Charly CanDo.
Forg en Nouvelle-Zélande ;-) - In üs we trust
//hostimage.webdev.info/avatars/default.gif
Posté le 16 mai 2017 - 13:10
Bonjour,

tout dépend de ce que tu fais dans les threads et si tu peux les arrêter
en cours de route

Si ce n'est pas important, th peux utilise threadarrete dans le code de
fermeture de ta fenetre

Si le traitement est important, tu peux positionner un flag global
(mettre ton compteur de thread à 100 par exemple), et dans le code de
tes thread, la ou ca ne posera pas de problème, tester si =100 et
arrêter le thread.

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 5/15/2017 à 4:47 PM, Monsieur AURAY-LORIVAL a écrit :
Merci beaucoup, ça à marché super !
J'ai un autre problème mais lié aux mêmes threads donc je pose la
problématique ici.

Quand j'arrive sur la fenêtre les 3 thread se lance, problème si je
reviens sur la fenêtre précedente avant la fin d'exécution des threads,
à un moment j'obtiens l'erreur comme quoi il ne trouve pas l'élément
Img_profil ce qui est normal car j'ai changé de fenêtre.
Du coup, comment arrêté les threads dès lors que je reviens sur la
fenêtre précédente ?

Merci
//hostimage.webdev.info/avatars/tLdYli8XgIdG6buDKmkuA
Membre enregistré
41 messages
Posté le 16 mai 2017 - 20:16
La solution à tout simplement été d'ajouter le traitement d'exception dans chaque thread.
Si exception..RETOUR

Ca traite en partie car ça m'oblige à inactivé mon bouton précédent car si je reviens sur la fenêtre précédente et sélectionne un autre élément de ma zr pour retourner sur la page, certains thread qui mettent du temps tourne encore depuis l'élément précédent et la y'a pas d'exception vu que je suis sur la fenêtre donc il m'affiche la fenêtre sans erreur mais avec les valeurs de l'ancien élément sélectionné.