| Le TERMINATE récalcitrant | |
|
|
|
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 0:07 | |
| - Klaus a écrit:
- Bon, c'est "brutal", mais efficace.
Je ne vois rien de brutal là-dedans : c’est E-F-F-I-C-A-S-S-E En plus ça innocente SCANCODE. On peut terminer le programme avec <ESC>, une touche quelconque du clavier, un click gauche ou un click droit. La sortie est « propre » et « muette » pas de son. - Code:
-
dim i,res% dll_on "KGF.dll" while 2 > 1 i = i + 1 caption 0,str$(i) : pause 100 if scancode <> 0 then res% = dll_call1("KillProcessByHandle",handle(0)) end_while
Si ça marche avec KillProcessByHandle , ça devrait marcher avec TERMINATE. Comme ça ne marche pas correctement avec TERMINATE, pourquoi aller chercher un autre "coupable" | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 0:20 | |
| Tu as raison, Papydall. C'est limpide. | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 0:58 | |
| Le dernier mot est à Jack | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 8:07 | |
| En attendant, si on n'utilise pas kgk.dll, il vaut mieux placer TERMINATE à la dernière ligne du code. Et gérer la sortie de programme par un sous-programme. - Code:
-
fin: terminate
J'espère que Jack va trouver ce bug. A+ | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 8:31 | |
| Heu.... c'est de plus en plus zarbi - Code:
-
label fin ' on_close 0,fin : ' cette ligne modifie le comportement de TERMINATE
END
fin: terminate
ON_CLOSE 0,fin déclenche l'arrêt critique Si ça peut aider à cerner le bug. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 9:39 | |
| Ca, c'est plutôt normal. avec "on_close 0,fin", tu déclenches cerrtainement une boucle infinie, ce qui est détecté par Windows. En effet, la commande TERMINATE provoqie justement l'évènement ON_CLOSE. Alors, lorsque tu déclenches le même évènement par un clic sur la croix rouge... Il ne doit pas beaucoup aimer cela. | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 10:04 | |
| Ho ! la la! Tu as raison, il ne faut pas utiliser TERMINATE dans le sous-programme déclenché par ON_CLOSE. ON_CLOSE n'est pas fait pour ça. Hé bien, j'ai quelques programmes à modifier... Je viens de découvrir une mauvaise habitude que j'avais prise. (j'ai bien fait de poster ce petit code !) A+ | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 10:22 | |
| Eh oui - une routine ON_CLOSE doit obligatoirement se terminer par RETURN ! | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 11:20 | |
| Good morning. On a appris des choses dans cette discussion et c’est toujours ça de gagné. On a mis le doigt là ou il faut (peut-être un chouia à côté). Jack a, maintenant, suffisamment d’infos pour voir de près le problème. Mais comme il ne s’agit pas d’une urgence, ça peut attendre. Si on se met d’accord pour appeler TERMINATE dans une SUB en ajoutant END derrière TERMINATE, ça résoudrait le problème. Voici comment j’opterai dorénavant - Code:
-
rem ============================================================================ rem Orbite rem ============================================================================ rem Paramètres pour une orbite géostationnaire autour de la Terre rem ============================================================================ Init() boucle() Fin() end rem ============================================================================ SUB Init() dim hauteur,speed,radius,time,scale,dt,g,x,y,px,py,xspeed,yspeed hauteur = 36000000 : speed = 3070 : radius = 6371000 time = 0 : scale = 400000 :dt = 40 :g = 9.81 x = 0 : y = radius + hauteur : px = 0 : py = 0 : xspeed = speed : yspeed = 0 height 0,350 : caption 0," <CLICK> pour arrêter ...." color 0,255,255,255 : font_name 0,"arial" : font_bold 0 : font_size 0,12 2d_fill_on : 2d_pen_width 20 : 2d_fill_color 255,255,255 END_SUB rem ============================================================================ SUB Boucle() dim_local dist,gravity,dx,dy,xac,yac while 0 = 0 dist = sqr((x-px)*(x-px) + (y-py)*(y-py)) gravity = g * (radius/dist) * (radius/dist) dx = x - px : dy = y - py xac = (dx/dist) * gravity : yac = (dy/dist) * gravity xspeed = xspeed - xac * dt : yspeed = yspeed - yac * dt x = x + xspeed * dt : y = y + yspeed * dt
print_locate 150 + x/scale,150 + y/scale : print "[]o[]" 2d_circle 150+px, 150+py, radius/scale -10 time = time + dt speed = int(sqr(xspeed*xspeed + yspeed*yspeed)) print_locate 50,10 : print "Paramètres pour une orbite géostationnaire autour de la Terre" print_locate 300,50 : print "Height = " + str$(dist/radius) + " radius" print_locate 300,70 : print "Speed = " + str$(speed) + " m/s" print_locate 300,90 : print "Time = " + str$(int(time/3600)) + " h" print_locate 300,110 : print "Grav-acc = " + str$((radius/dist)*(radius/dist)) + " g" print_locate 300,130 : print "Centri-acc = " + str$((speed*speed/dist)/g)+ " g" display if scancode <> 0 then Fin() end_while END_SUB rem ============================================================================ SUB Fin() dim_local h for h = height(0) to 10 step -1 : height 0,h : next h terminate end : ' Ce END après TERMINATE élimine le désagréable bip END_SUB rem ============================================================================
REMARQUE : Vous pouvez commenter ce code : un mouvement rien qu'avec des PRINT_LOCATE. | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 14:29 | |
| - Papydall a écrit:
- On a appris des choses dans cette discussion et c’est toujours ça de gagné.
c'est très vrai ! A+ | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le TERMINATE récalcitrant Sam 3 Oct 2015 - 16:24 | |
| On a même appris qu’un honorable Panoramicien ose accuser sa femme qui n’a rien à voir dans l’affaire. Il joue à cache-cache avec les balises HIDE et il se demande pourquoi il ne voit pas ce qu’il a « hidé » ! On a tout vu ! Du calme, je sors | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 17 Oct 2015 - 0:08 | |
| Je reviens au sujet "bug avec Terminate". Il y a vraiment un bug ! La preuve: TERMINATE dans une SUB, ça marche: - Code:
-
label go button 1 : caption 1,"Go" : on_click 1,go end
go: ' form 5000 terminate return mais si j'enlève le commentaire devant la commande FORM, ça plante: - Code:
-
label go button 1 : caption 1,"Go" : on_click 1,go end
go: form 5000 terminate return alors que si le mets un commentaire devant TERMINATE, ça marche: - Code:
-
label go button 1 : caption 1,"Go" : on_click 1,go end
go: form 5000 ' terminate return ===> il y a vraiment unn bug, et il faut que Jaclk regarde ça ! | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le TERMINATE récalcitrant Sam 17 Oct 2015 - 2:54 | |
| Et comme ça, ça ne plante pas, à part le désagréable son émis. - Code:
-
label go button 1 : caption 1,"Go" : on_click 1,go
end
go: form 5000 : pause 1000 delete 5000 terminate return
Si vous comprenez quelque chose, éclairez-moi. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le TERMINATE récalcitrant Sam 17 Oct 2015 - 3:12 | |
| Non, je n'y comprends rien. Ce n'est pas normal. Et la preuve qu'un arrêt "correct" est possible, c'est ma fonction KillProcessByHandle. Pas de crash, pas de son. Net et propre. Alors, pourquoi TERMINATE ne le fait pas ? | |
|
| |
Contenu sponsorisé
| Sujet: Re: Le TERMINATE récalcitrant | |
| |
|
| |
| Le TERMINATE récalcitrant | |
|