Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Procédure maîtresse

20 réponses
Avatar
fraction
Bonjour
Il m'arrive de demander =E0 un module d'en appeler un autre. Mais une
fois que le deuxi=E8me a accompli sa t=E2che, il ne renvoie pas la main.
J'ai une solution, mais elle est compliqu=E9e. Comment faire simplement ?

10 réponses

1 2
Avatar
LE TROLL
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" a écrit dans le message de
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 ?
Avatar
Vincent Guichard
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
Avatar
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.
Avatar
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

"fraction" a écrit dans le message de news:


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.
Avatar
fraction
On 23 déc, 15:45, "Driss HANIB" wrote:
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.
Avatar
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 tu
sois bloqué à la compilation.

Driss

"fraction" a écrit dans le message de news:

On 23 déc, 15:45, "Driss HANIB" wrote:
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.
Avatar
fraction
On 23 déc, 17:06, "Driss HANIB" wrote:
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.
Avatar
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
Avatar
fraction
On 23 déc, 17:35, Vincent Guichard wrote:
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
Avatar
fraction
On 23 déc, 17:50, fraction wrote:
On 23 déc, 17:35, Vincent Guichard wrote:





> 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.
1 2