Procédure maîtresse

Le
fraction
Bonjour
Il m'arrive de demander à un module d'en appeler un autre. Mais une
fois que le deuxième a accompli sa tâche, il ne renvoie pas la main.
J'ai une solution, mais elle est compliquée. Comment faire simplement ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LE TROLL
Le #20821651
Bonjour,

N'est-ce pas plutôt une procédure ou fonction qui ne rend pas la main
dans le module, ou encore un appel récursif et permanent des modules, je
pense qu'il faut piéger afin de savoir à quel endroit de quel module ça
conserve la main...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"fraction" news:
Bonjour
Il m'arrive de demander à un module d'en appeler un autre. Mais une
fois que le deuxième a accompli sa tâche, il ne renvoie pas la main.
J'ai une solution, mais elle est compliquée. Comment faire simplement ?
Vincent Guichard
Le #20824741
Le 22/12/2009 18:39, fraction a écrit :
Bonjour
Il m'arrive de demander à un module d'en appeler un autre. Mais une
fois que le deuxième a accompli sa tâche, il ne renvoie pas la main .
J'ai une solution, mais elle est compliquée. Comment faire simplement ?



Bonjour,

Je ne comprends pas le problème. Qu'entends-tu par "appeler un module"?
En général, on appelle une fonction d'un module, pas le module lui-mê me.
Et le retour d'un fonction est automatique (sauf si la fonction contient
une boucle infinie).
Peux-tu donner un exemple de code?

Vincent Guichard
fraction
Le #20825061
> Je ne comprends pas le problème. Qu'entends-tu par "appeler un module"?
En général, on appelle une fonction d'un module, pas le module lui-m ême.
Et le retour d'un fonction est automatique (sauf si la fonction contient
une boucle infinie).
Peux-tu donner un exemple de code?

Vincent Guichard



Oui, tu as raison. J'appelle une procédure d'un module, elle-même
appelle d'autres procédures de ce même module. Mais une fois cette
exécution terminée, elle ne renvoie pas la main. Le code est trop
compliqué pour l'écrire ici.
J'ai peut-être fait une erreur.
Ça m'arrive rarement. Et j'ai trouvé la parade en déclarant une
variable publique et en demandant à la procédure fille de revenir en
arrière.
Driss HANIB
Le #20825121
Salut fraction

Je pense comme Vincent que tu devrais nous faire quand une petite démo de
tes appels

tu peux shunter la partie appel de procédures dans le même module.
mais nous faire voir quand même comment c'est construit..
Car si tu appelles ta procédure à l'intérieur d'une procédure "maîtresse" il
n'y a aucune raison que cela ne revienne pas.

As tu essayé le mode pas à pas. c'est sans doute fastidieux, mais très
intéressant pour debugger.

essaie en simplifiant de nous faire voir un bout de ta démarche.

Driss

"fraction"

Je ne comprends pas le problème. Qu'entends-tu par "appeler un module"?
En général, on appelle une fonction d'un module, pas le module lui-même.
Et le retour d'un fonction est automatique (sauf si la fonction contient
une boucle infinie).
Peux-tu donner un exemple de code?

Vincent Guichard



Oui, tu as raison. J'appelle une procédure d'un module, elle-même
appelle d'autres procédures de ce même module. Mais une fois cette
exécution terminée, elle ne renvoie pas la main. Le code est trop
compliqué pour l'écrire ici.
J'ai peut-être fait une erreur.
Ça m'arrive rarement. Et j'ai trouvé la parade en déclarant une
variable publique et en demandant à la procédure fille de revenir en
arrière.
fraction
Le #20825101
On 23 déc, 15:45, "Driss HANIB"
Salut fraction

Je pense comme Vincent que tu devrais nous faire quand une petite démo de
tes appels

tu peux shunter la partie appel de procédures dans le même module.
mais nous faire voir quand même comment c'est construit..
Car si tu appelles ta procédure à l'intérieur d'une procédure "ma îtresse" il
n'y a aucune raison que cela ne revienne pas.

As tu essayé le mode pas à pas. c'est sans doute fastidieux, mais tr ès
intéressant pour debugger.

essaie en simplifiant de nous faire voir un bout de ta démarche.

Driss



C'est-à-dire que maintenant que j'ai trouvé la parade, il m'est
difficile de revenir en arrière et de vous exposer le problème
concrètement. Mais je vous fais confiance, "il n'y a aucune raison que
cela ne revienne pas". Il s'agit probablement d'un problème
d'interprétation de ma part. A l'avenir, je n'utiliserais plus cette
parade.
Driss HANIB
Le #20825391
Salut Fraction

OK pour cela.
Regarde quand même tout de suite si tu peux comiler ton projet.
Cela serait dommage que tu avance de plus en plus dans ta parade et que tu
sois bloqué à la compilation.

Driss

"fraction"
On 23 déc, 15:45, "Driss HANIB"
Salut fraction

Je pense comme Vincent que tu devrais nous faire quand une petite démo de
tes appels

tu peux shunter la partie appel de procédures dans le même module.
mais nous faire voir quand même comment c'est construit..
Car si tu appelles ta procédure à l'intérieur d'une procédure "maîtresse"
il
n'y a aucune raison que cela ne revienne pas.

As tu essayé le mode pas à pas. c'est sans doute fastidieux, mais très
intéressant pour debugger.

essaie en simplifiant de nous faire voir un bout de ta démarche.

Driss



C'est-à-dire que maintenant que j'ai trouvé la parade, il m'est
difficile de revenir en arrière et de vous exposer le problème
concrètement. Mais je vous fais confiance, "il n'y a aucune raison que
cela ne revienne pas". Il s'agit probablement d'un problème
d'interprétation de ma part. A l'avenir, je n'utiliserais plus cette
parade.
fraction
Le #20825461
On 23 déc, 17:06, "Driss HANIB"
Salut Fraction

OK pour cela.
Regarde quand même tout de suite si tu peux comiler ton projet.
Cela serait dommage que tu avance de plus en plus dans ta parade et que t u
sois bloqué à la compilation.

Driss



Je programme à partir d'Excel. Je n'ai pas à compiler, enfin je crois.
Vincent Guichard
Le #20825501
Le 23/12/2009 15:35, fraction a écrit :

Je ne comprends pas le problème. Qu'entends-tu par "appeler un modul e"?
En général, on appelle une fonction d'un module, pas le module lui -même.
Et le retour d'un fonction est automatique (sauf si la fonction contie nt
une boucle infinie).
Peux-tu donner un exemple de code?

Vincent Guichard



Oui, tu as raison. J'appelle une procédure d'un module, elle-même
appelle d'autres procédures de ce même module. Mais une fois cette
exécution terminée, elle ne renvoie pas la main. Le code est trop
compliqué pour l'écrire ici.
J'ai peut-être fait une erreur.
Ça m'arrive rarement. Et j'ai trouvé la parade en déclarant une
variable publique et en demandant à la procédure fille de revenir e n
arrière.



Comment donc peux-tu demander à la procédure fille de revenir en
arrière? Et comment une variable publique peut-elle bien corriger un
problème tel que tu le décris? Je subodore un grave problème de
conception de l'application. Faute du code complet, peut être
pourrais-tu indiquer une pile des appels? Et donner la "parade" que tu
as trouvé?

Voici les choses telles que je les comprends, avec les informations
limitées que j'ai. Tu appeles une fonction (ou une procédure) qui se
trouves dans ton module. Cette fonction ne retourne jamais: Pourquoi?
En général, c'est qu'il y a une boucle infinie (par exemple, la
condition de fin de boucle ne se produit pas). Une des possibilités qui
me viennent à l'esprit est que tu travailles sur deux threads avec des
variables portant le même nom, et que tu t'attends en modifiant l'une à
voir l'autre se modifier.
Pour sortir d'une boucle tu n'as pas 36 possibilités:
+ la condition de sortie se produit (normal)
+ un appel Exit pour sortir proprement avant que la condition soit réal isée
+ un appel Goto vers un label en dehors de la boucle (beurk, mais
parfois utile si on sait ce qu'on fait)

Ce dont j'ai peur, c'est que la parade que tu as trouvé consiste en
l'appel de la procédure maitresse, en utilisant la variable publique
pour savoir que tu reviens de la procédure du module. Et ca, c'est trè s
dangereux, parce que ça veux dire que tu vas empiler les appels et fini r
par cracher l'appli, faute de mémoire.

Vincent Guichard
fraction
Le #20825711
On 23 déc, 17:35, Vincent Guichard
Le 23/12/2009 15:35, fraction a écrit :







>> Je ne comprends pas le problème. Qu'entends-tu par "appeler un modul e"?
>> En général, on appelle une fonction d'un module, pas le module lui -même.
>> Et le retour d'un fonction est automatique (sauf si la fonction contie nt
>> une boucle infinie).
>> Peux-tu donner un exemple de code?

>> Vincent Guichard

> Oui, tu as raison. J'appelle une procédure d'un module, elle-même
> appelle d'autres procédures de ce même module. Mais une fois cette
> exécution terminée, elle ne renvoie pas la main. Le code est trop
> compliqué pour l'écrire ici.
> J'ai peut-être fait une erreur.
> Ça m'arrive rarement. Et j'ai trouvé la parade en déclarant une
> variable publique et en demandant à la procédure fille de revenir e n
> arrière.

Comment donc peux-tu demander à la procédure fille de revenir en
arrière? Et comment une variable publique peut-elle bien corriger un
problème tel que tu le décris? Je subodore un grave problème de
conception de l'application. Faute du code complet, peut être
pourrais-tu indiquer une pile des appels? Et donner la "parade" que tu
as trouvé?

Voici les choses telles que je les comprends, avec les informations
limitées que j'ai. Tu appeles une fonction (ou une procédure) qui se
trouves dans ton module. Cette fonction ne retourne jamais: Pourquoi?
En général, c'est qu'il y a une boucle infinie (par exemple, la
condition de fin de boucle ne se produit pas). Une des possibilités qui
me viennent à l'esprit est que tu travailles sur deux threads avec des
variables portant le même nom, et que tu t'attends en modifiant l'une à
voir l'autre se modifier.
Pour sortir d'une boucle tu n'as pas 36 possibilités:
+ la condition de sortie se produit (normal)
+ un appel Exit pour sortir proprement avant que la condition soit réal isée
+ un appel Goto vers un label en dehors de la boucle (beurk, mais
parfois utile si on sait ce qu'on fait)

Ce dont j'ai peur, c'est que la parade que tu as trouvé consiste en
l'appel de la procédure maitresse, en utilisant la variable publique
pour savoir que tu reviens de la procédure du module. Et ca, c'est tr ès
dangereux, parce que ça veux dire que tu vas empiler les appels et fini r
par cracher l'appli, faute de mémoire.

Vincent Guichard



Par exemple, mon module volonté doit déduire les propriétés de n
combinaisons :

public compteur as integer

module volonté :
public sub simulation()
compteur=compteur+1
déduction.exécution(compteur)
if compteur=n then
end
endif
end sub

module déduction :
public sub exécution(x)
blablabla
volonté.simulation
end sub
fraction
Le #20825701
On 23 déc, 17:50, fraction
On 23 déc, 17:35, Vincent Guichard




> Le 23/12/2009 15:35, fraction a écrit :

> >> Je ne comprends pas le problème. Qu'entends-tu par "appeler un mod ule"?
> >> En général, on appelle une fonction d'un module, pas le module l ui-même.
> >> Et le retour d'un fonction est automatique (sauf si la fonction cont ient
> >> une boucle infinie).
> >> Peux-tu donner un exemple de code?

> >> Vincent Guichard

> > Oui, tu as raison. J'appelle une procédure d'un module, elle-même
> > appelle d'autres procédures de ce même module. Mais une fois cett e
> > exécution terminée, elle ne renvoie pas la main. Le code est trop
> > compliqué pour l'écrire ici.
> > J'ai peut-être fait une erreur.
> > Ça m'arrive rarement. Et j'ai trouvé la parade en déclarant une
> > variable publique et en demandant à la procédure fille de revenir en
> > arrière.

> Comment donc peux-tu demander à la procédure fille de revenir en
> arrière? Et comment une variable publique peut-elle bien corriger un
> problème tel que tu le décris? Je subodore un grave problème de
> conception de l'application. Faute du code complet, peut être
> pourrais-tu indiquer une pile des appels? Et donner la "parade" que tu
> as trouvé?

> Voici les choses telles que je les comprends, avec les informations
> limitées que j'ai. Tu appeles une fonction (ou une procédure) qui s e
> trouves dans ton module. Cette fonction ne retourne jamais: Pourquoi?
> En général, c'est qu'il y a une boucle infinie (par exemple, la
> condition de fin de boucle ne se produit pas). Une des possibilités q ui
> me viennent à l'esprit est que tu travailles sur deux threads avec de s
> variables portant le même nom, et que tu t'attends en modifiant l'une à
> voir l'autre se modifier.
> Pour sortir d'une boucle tu n'as pas 36 possibilités:
> + la condition de sortie se produit (normal)
> + un appel Exit pour sortir proprement avant que la condition soit ré alisée
> + un appel Goto vers un label en dehors de la boucle (beurk, mais
> parfois utile si on sait ce qu'on fait)

> Ce dont j'ai peur, c'est que la parade que tu as trouvé consiste en
> l'appel de la procédure maitresse, en utilisant la variable publique
> pour savoir que tu reviens de la procédure du module. Et ca, c'est tr ès
> dangereux, parce que ça veux dire que tu vas empiler les appels et fi nir
> par cracher l'appli, faute de mémoire.

> Vincent Guichard

Par exemple, mon module volonté doit déduire les propriétés de n
combinaisons :

public compteur as integer

module volonté :
public sub simulation()
compteur=compteur+1
déduction.exécution(compteur)
   if compteur=n then
   end
   endif
end sub

module déduction :
public sub exécution(x)
blablabla
volonté.simulation
end sub



Sauf que là, j'ai mis la condition de sortie après.
Publicité
Poster une réponse
Anonyme