Probleme de récursivité entre deux appels de sub

Utilisateur anonyme - 18 déc. 2005 à 00:59
 Utilisateur anonyme - 18 déc. 2005 à 15:55
Bonjour, j'ai un petit souci avec deux subs qui s'appellent mutuellement dans le code ci-dessous. Une erreur de type StackOverflow (Err 28 : Espace de pile insufisant) arrête l'application au bout d'une dizaine de seconde (au bout de . Connaisseriez vous un appel spécial (ou un 'truc') demandant de terminer sub2 en appelant sub1 afin de permettre de pas accumuler ces subs dans la mémoire.

Public i As Long

Private Sub Command1_Click()
sub1
End Sub


Private Sub sub1()
Text1.Text = i
DoEvents
Debug.Print "sub1"
i = i + 1
if i < 10000 then sub2
End Sub

Private Sub sub2()
Text1.Text = i
DoEvents
Debug.Print "sub2"
i = i + 1
sub1
End Sub

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 déc. 2005 à 01:14
Salut
Mais pourquoi relances-tu Sub1 à la fin de Sub2 ?
Sub1 appelle Sub2.
Quand Sub2 est terminée, elle revient à l'instruction qui suit celle qui l'a appelé.

Que veux-tu faire exactement ?
C'est bizarre comme idée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
saidelm Messages postés 5 Date d'inscription mardi 28 septembre 2004 Statut Membre Dernière intervention 18 décembre 2005
18 déc. 2005 à 15:22
salut
c'est le genre de code à eviter. Essaie de revoir tes idées il y a surement d'autres façons de repenser le pb
Bonne chance
0
Utilisateur anonyme
18 déc. 2005 à 15:55
Voila ce que ça doit donner dans l'appli :

Une requête cliente >> appelle une fonction qui lit x octets d'un fichier >> qui l'envoie sur le socket >> qui une fois terminé (socket_complete) >> appel la fonction qui lit x octets d'un fichier >> qui l'envoie sur le socket >> ....... >> et arrete le tout lorsque la fin du fichier est atteinte

Avant j'avais un timer qui vérifiait tout les 1ms si l'envoi du socket était terminé (send_complete mettait une valeur à true) et si c'était le cas ce timer renvoyait des octets sur le socket, etc... Ca marchait bien mais c'était trés lent (1mo/sec contre 9mo/sec avec des appels récursifs, normal il n'y a plus d'instant d'attente). Je cherche donc le moyen de faire en sorte d'appeler dans send_complete la fonction qui enverra la suite des octets lu dans le fichier mais sans accumuler tout ces fonctions qui ne se décharge jamais en memoire et provoquer un dépassement de pile.
0
Rejoignez-nous