PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comportement étrange de TimerSys() dans une méthode de classe
Comportement étrange de TimerSys() dans une méthode de classe
Débuté par Julien V, 18 oct. 2020 11:07 - 1 réponse
Membre enregistré
129 messages
Popularité : +20 (20 votes)
Posté le 18 octobre 2020 - 11:07
Bonjour,

J'essaie d'implémenter un TimerSys() dans une méthode de classe
https://doc.pcsoft.fr/fr-FR/?3015006&3015006
Code d'une méthode d'un objet :
Si la fonction TimerSys est appelée dans une méthode d'un objet, le timer est associé à l'objet. Le timer est interrompu par la fonction FinTimerSys, par la libération de l'objet et par la fermeture de la fenêtre.

Si j'appelle une autre méthode de classe (même vide) dans celle qui est appelée par le TimerSys(), systématiquement j'ai une erreur de dépassement de pile d’exécution :
Que s'est-il passé ?
Votre code a provoqué un dépassement de la pile d'exécution.

Code erreur : 1058
Niveau : erreur fatale

Dump de l'erreur du module 'wd240vm64.dll' (24.0.600.2).
Identifiant des informations détaillées (.err) : 1058
Informations de débogage :
vm.cpp, 1238
WLanguage stack overflow
Informations supplémentaires :
EIT_PILEWL :
Méthode main (CTest.main)
Méthode main (CTest.main), ligne 4
Méthode main (CTest.main), ligne 4


L'erreur est facilement reproductible avec une classe de test n'ayant que ce code suivant :
CTest est une Classe

FIN

Procedure init()

SI TimerSys( ":main", 1, 1 ) = 0 ALORS
TitreSuivant( "Avertissement" )
Erreur( "Création du timer impossible" )
FIN // SI Timer( main, 1, 1 ) = 0 ALORS

Procedure main()

update()
render()

Procedure update()
// Vide

Procedure render()
// Vide

test est un CTest // ou test est un objet CTest ou test est un objet dynamique = allouer un CTest
test.init()

Par contre si je n'appelle pas d'autres méthodes de classe dans main() ou si j'utilise des procédures internes, ça passe :
Procedure main()

i_update()
i_render()
PROCEDURE INTERNE i_update()
Trace( "update OK" )
FIN
PROCEDURE INTERNE i_render()
Trace( "render OK" )
FIN


Si quelqu'un sait comment faire, je suis preneur !
Membre enregistré
129 messages
Popularité : +20 (20 votes)
Posté le 19 octobre 2020 - 08:18
Bon c'est de ma faute, ça fonctionne très bien, je n'avais pas déclaré l'objet test est un CTest en variable globale...