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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
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.