PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Problème de procédures
Problème de procédures
Débuté par Seb, 12 jan. 2015 00:23 - 7 réponses
Posté le 12 janvier 2015 - 00:23
Bonjour,

J'ai un problème que je n'arrive pas à résoudre au sujet des procédures automatiques.

Au bout de 1h25 pile poile, le logiciel plante (TrucMuche à cessé de fonctionner...).
Celui-ci enchaîne des procédures automatiques à des moment bien précis à répétition et lorsque qu'une procédure est lancé, la précédente ce termine.

Voici un exemple pour être plus claire :
La procédure automatique "Temp" est lancé au démarrage du logiciel. Au bout de 120 secondes, la procédure "Temp" lance la procédure "Heure" puis la procédure "Temp" est arrêté.
Après 20 secondes, la procédure "Heure" lance la procédure "Temp" puis la procédure "Heure" est arrêté.
Et ainsi de suite.

Mais au bout de 1h25 pile poile, tout plante.
J'ai également regardé les logs générés avec
dbgActiveLog(fRepEnCours+"\Logs\[%Date%]__[%Heure%]",LogTout)
et j'ai remarqué qu'il y avais 10 thread et pas un de plus. Es cela le problème ? Si oui, comment y remédier?

Je vous remercie d'avance
Membre enregistré
101 messages
Popularité : +1 (1 vote)
Posté le 12 janvier 2015 - 11:27
Bonjour,
Ce serait utile d'avoir soit le message d'erreur complet, soit la façon dont tu procèdes pour 'appeler la procédure X et arrêter la procédure Y'.

Sinon, à défaut, vu de ma boule de cristal, je pense que c'est au niveau de la pile des appels qu'il y a un débordement.
Posté le 12 janvier 2015 - 22:34
Joel a écrit :
Bonjour,
Ce serait utile d'avoir soit le message d'erreur complet, soit la façon dont tu procèdes pour 'appeler la procédure X et arrêter la procédure Y'.

Sinon, à défaut, vu de ma boule de cristal, je pense que c'est au niveau de la pile des appels qu'il y a un débordement.


Merci de votre réponse.

Et bien, le message d'erreur est, comme indiqué dans mon premier poste : "... a cessé de fonctionner".

J'appel la procédure avec
Procédure1()
puis je termine la précédente procédure avec
FinAutomatismeProcédure(Procédure2)

Et ainsi de suite à période régulière.

Et au bout de 1h25 de fonctionnement, l'appli plante avec ce fameux message. Il n'y a rien d'indiqué de plus, juste que le logiciel a cessé de fonctionner. Dans les logs, rien à signalé. Tout semble niquel.
Membre enregistré
101 messages
Popularité : +1 (1 vote)
Posté le 13 janvier 2015 - 10:09
Oui, donc ça se confirme.
Tu dis que tu utilises des procédures automatiques. Mais si tu utilisais 2 procédures simples, ton traitement se déroulerait exactement pareil : Proc1 lance Proc2, puis Proc2 lance Proc1 ... qui relance proc2 et ainsi de suite.
En fait, tu utilises des procédures automatiques, mais tu désactives le caractère 'automatique' dès le premier appel.

Pour être sûr du diagnostic, exécute le traitement en mode test, et mets un point d'arrêt dans l'une des procédures et tu verras dans le débugger que les appels à Proc1 et Proc2 s'empilent.
Tu verras aussi dans le Gestionnaire de Taches Windows, dans l'onglet procédure, que ton programme consomme de plus en plus de mémoire.

Une organisation possible, c'est de réellement utiliser les procédures automatiques :
Proc1 s'exécute, et au bout de 20 secondes, proc1 appelle Proc2.
Et quand proc2 a fini son travail, proc2 s'arrête, et renvoie la main à la procédure appelante proc1 ... qui n'a plus rien à faire.

Et tu paramètres ta procédure proc1 pour qu'elle se lance toutes les 140 secondes.
Posté le 13 janvier 2015 - 16:46
Merci Joel pour cette réponse.

Après quelques tests, la taille du processus Windows reste stable et n'augmente pas. La taille est de 17 112K au plus haut jusqu'au plantage. Personnellement, je trouve la taille correct.

J'ai désactivé l’option "Exécution dans un trhead" dans mes procédures, du coup maintenant il n'y a plus qu'un Thread principal en fonctionnement et non plus 10 cumulé. Proc1 attend maintenant que proc2 soit fini. Ils ne s’empile plus du coup.

Mais le problème persiste. Il plante toujours et encore, mais cette fois, après 1h45 de fonctionnement. Mystère.
Posté le 13 janvier 2015 - 19:26
Bonjour

si je comprend bien ce que tu fais, tu es dans le cas classique du gars
qui scie la branche sur laquelle il est assis... J'explique :

Proc A lance proc B puis est arrêté... Dans la pile des appels proc B
n'a donc plus d'ancêtre
Proc B lance proc A puis est arrété... Dans la pile des appels Proc A
n'a plus d'ancêtre...

Ca ne te dis peut être rien, mais la gestion de la pile des appels
n'aime pas du tout essayer de dépiler des adresses de retour qui
n'existent plus, donc, au bout d'un moment ca plante...

D’habitude dans ce genre de chose, le plantage est aléatoire (si ca
t’intéresse, j'ai toute une série d'article sur le sujet sur mon site).
Dans ton cas, comme tout est fait en automatique sans intervention
humaine, ca plante toujours au même moment...


Donc, il faut remplacer la LOGIQUE actuelle...
Par exemple, tu peux n'avoir qu'une procédure qui s'active toutes les 20
secondes, et un flag/compteur qui te dit s'il faut exécuter le code A ou B

Cordialement


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

NOUVEAU: WXReplication, votre système de réplication open source est
disponible sur mon site web !!!
WXShowroom.com : Montrez vos projets !
Plus d'information sur http://fabriceharari.com


On 1/13/2015 10:46 AM, Seb wrote:
Merci Joel pour cette réponse.

Après quelques tests, la taille du processus Windows reste stable et
n'augmente pas. La taille est de 17 112K au plus haut jusqu'au plantage.
Personnellement, je trouve la taille correct.

J'ai désactivé l’option "Exécution dans un trhead" dans mes procédures,
du coup maintenant il n'y a plus qu'un Thread principal en
fonctionnement et non plus 10 cumulé. Proc1 attend maintenant que proc2
soit fini. Ils ne s’empile plus du coup.

Mais le problème persiste. Il plante toujours et encore, mais cette
fois, après 1h45 de fonctionnement. Mystère.
Posté le 15 janvier 2015 - 18:39
Merci Fabrice Harari,

Avec ton commentaire, j'ai pu comprendre le problème.

J'ai donc refait mes codes sur une seule procédure et j'ai simplement joué avec les Boucles.

Du coup, là, il tourne depuis maintenant 3H et toujours pas de plantage. C'est sur le bon chemin.

Encore merci.
Posté le 16 janvier 2015 - 20:07
Plus de 24h que l'application tourne depuis les changement. Merci encore.

Sujet résolu.