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
Procedure main()
update()
render()
Procedure update()
Procedure render()
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 !