impossible de catcher une exception

impossible de catcher une exception - C++ - Programmation

Marsh Posté le 02-07-2003 à 10:33:40    

salut,
 
J'utilise la lib glut pour avoir des progs portables sous win et linux. Comme glutMainLoop ne retourne jamais  :fou: , je lance une exception quand la touche echap est pressée ce qui me permet de quitter proprement l'application. Le problème c'est que sous linux l'exception n'est pas catchée (pas sous win). J'ai pourtant mis un try-catch au niveau du main pour etre sur.
La gestion des exceptions est différente ? J'ai loupé un truc ?
Sinon d'autres idées pour quitter normalement le prog ?
 
merci

Reply

Marsh Posté le 02-07-2003 à 10:33:40   

Reply

Marsh Posté le 02-07-2003 à 11:08:59    

Ben avec un chtit bout de code se serait plus facile.


---------------
Le Tyran
Reply

Marsh Posté le 02-07-2003 à 11:13:23    

j'y connais rien mais j'ai vu qu'il y avait des bindings et pour le  C et pour le C++. si tu utilises les bindings C, les exceptions font planter... j'ai déjà eu ce problème insoluble quand on mix du C++ avec du un bibli graphique C, j'avais moi aussi pensé à l'exception comme sortie élégante, et j'étais tomber sur le même problème. donc j'ai laissé tomber tout ça. pour ton information, si tu es soucieux du C++, n'utilise jamais exit() par ce qu'en fait c'est tuer le programme: aucun destructeur n'est appelé ni rien ni rien. donc, j'ai vraiment laissé tomber tellement je trouvais pas de solution

Reply

Marsh Posté le 02-07-2003 à 11:17:37    

++Taz a écrit :

j'y connais rien mais j'ai vu qu'il y avait des bindings et pour le  C et pour le C++. si tu utilises les bindings C, les exceptions font planter... j'ai déjà eu ce problème insoluble quand on mix du C++ avec du un bibli graphique C, j'avais moi aussi pensé à l'exception comme sortie élégante, et j'étais tomber sur le même problème. donc j'ai laissé tomber tout ça. pour ton information, si tu es soucieux du C++, n'utilise jamais exit() par ce qu'en fait c'est tuer le programme: aucun destructeur n'est appelé ni rien ni rien. donc, j'ai vraiment laissé tomber tellement je trouvais pas de solution


 
<jamais essayé, connais que de nom>
setjmp / longjmp ?
</jamais essayé, connais que de nom>
 
 

Reply

Marsh Posté le 02-07-2003 à 11:21:31    

++Taz a écrit :

j'avais moi aussi pensé à l'exception comme sortie élégante


 
Elégante, élégante, c'est vite dit. ça sert pas à ça en principe une exception !
Bon, après, c'est sur  que c'est plus élégant qu'un gros crash.
Mais ça m'étonnerai qu'avec glut, on n'ai pas d'autre moyen de quitter la boucle infernale.

Reply

Marsh Posté le 02-07-2003 à 11:29:47    

chrisbk a écrit :


 
<jamais essayé, connais que de nom>
setjmp / longjmp ?
</jamais essayé, connais que de nom>
 
 
 

pas la peine d'y penser, y a plus d'objet qui tiennent avec ça...
 
et oui, quand on arrive pas à structurer son programme de façon à terminer avec le retour d'une fonction ou en cas d'erreur, c'est élégant de lancer une exception et c'est tres sur. Il faut completement abandonner les exit et autre fonction du meme style et toujours lancer une exception. Meme si personne ne l'attrape, elle garantie l'appel de tous les destructeurs. moi quand je fais ça, soit je la catch, soit  dans le cas extrêm, quand je suis sur que rien d'autre ne peut être lancé (puisque traité par des catch plus profond), je change carrément le handler comme ça l'exception est lancée et le programme termine tranquillement.
 
 

Citation :

Elégante, élégante, c'est vite dit. ça sert pas à ça en principe une exception !

tu fais pas du Java? tu veux qu'on en parle de la EOFException?  [:tomtom75]

Reply

Marsh Posté le 02-07-2003 à 11:47:19    

++Taz a écrit :

tu fais pas du Java? tu veux qu'on en parle de la EOFException?  [:tomtom75]  


 
Hé oui, même Sun ne produit pas toujours du code parfait. Y surement parfois des contraintes qui font qu'on ne peux pas s'en tirer autrement. N'empêche que, niveau élégance, peut mieux faire ! :D

Reply

Marsh Posté le 02-07-2003 à 11:57:41    

ben oui mais bon. quand tu veux quitter ton programme / passer à autre chose avec une appli graphique et __sans__ appeler exit (vade retro :fou:), ben je trouve ça pas plus mal qu'un de tes callback lance une exception

Reply

Marsh Posté le 02-07-2003 à 12:10:47    

++Taz a écrit :

ben oui mais bon. quand tu veux quitter ton programme / passer à autre chose avec une appli graphique et __sans__ appeler exit (vade retro :fou:), ben je trouve ça pas plus mal qu'un de tes callback lance une exception  


 
Mais... si c'est toi qui écrit l'API, tu peux bien faire une sorte d' "exit", correct, qui appellera bien les destructeur et tout ça, avant d'appeler LE "exit" que tu renies. Non ?

Reply

Marsh Posté le 02-07-2003 à 12:18:09    

ben si t'as une technique pour faire ça je suis preneur, jusqu'ici cela me semble impossible sans passer par les exceptions.

Reply

Marsh Posté le 02-07-2003 à 12:18:09   

Reply

Marsh Posté le 02-07-2003 à 12:32:16    

++Taz a écrit :

ben si t'as une technique pour faire ça je suis preneur, jusqu'ici cela me semble impossible sans passer par les exceptions.


 
tu stockes l'adresses de tes objets a detruire dans un gros tableau que tu detruiras dans une fonction que tu auras prealablement fournie a onexit(). Tu peut fair des macros pour automatiser un peu le bins
 
classe [:aloy]

Reply

Marsh Posté le 02-07-2003 à 12:35:11    

++Taz a écrit :

j'y connais rien mais j'ai vu qu'il y avait des bindings et pour le  C et pour le C++. si tu utilises les bindings C, les exceptions font planter... j'ai déjà eu ce problème insoluble quand on mix du C++ avec du un bibli graphique C, j'avais moi aussi pensé à l'exception comme sortie élégante, et j'étais tomber sur le même problème. donc j'ai laissé tomber tout ça. pour ton information, si tu es soucieux du C++, n'utilise jamais exit() par ce qu'en fait c'est tuer le programme: aucun destructeur n'est appelé ni rien ni rien. donc, j'ai vraiment laissé tomber tellement je trouvais pas de solution


 :jap:  
 
Sur ce point glut est vraiment naze, suffit de voir le code : c'est exit qui est appelé pour sortir de la boucle. super !
C'est pour ca que je voulais lancer une exception pour eviter ca.
 
Bon apparemment y a pas de solution valable. J'ai pensé à modifier le code glut pour qu'il ne termine pas le programme comme un goret mais c'est pas genial. Ca serait pas possible d'intercepter les appels a exit ?
 
edit: chrisbk, we j'ai vu ca bien que ce soit atexit. Mais j'ai pas envie de m'amuser à maintenir une table des adresses de tous mes objets.


Message édité par hellbilly le 02-07-2003 à 12:42:38
Reply

Marsh Posté le 02-07-2003 à 12:39:34    

encore faut il tout faire en mémoire dynamique et j'espere que tu te rends bien compte que si c'etait si facile de référencer tous ses objets... j'avais déjà tenté le coup avec une pseudo-corbeille, ça fonctionner pas trop mal, mais y avait encore trop de truc qui passait par les mailles du filet. et puis c'est lourdingue, je fais déjà tout en smartPointer quand je fais des appli graphiques. et puis meme si cette méthode est valide à une certaine échélle, elle ne fonctionne pas si l'on souhaite simplement arreter un rendu et pas quitter l'application

Reply

Marsh Posté le 02-07-2003 à 12:52:56    

++Taz a écrit :

encore faut il tout faire en mémoire dynamique et j'espere que tu te rends bien compte que si c'etait si facile de référencer tous ses objets... j'avais déjà tenté le coup avec une pseudo-corbeille, ça fonctionner pas trop mal, mais y avait encore trop de truc qui passait par les mailles du filet. et puis c'est lourdingue, je fais déjà tout en smartPointer quand je fais des appli graphiques. et puis meme si cette méthode est valide à une certaine échélle, elle ne fonctionne pas si l'on souhaite simplement arreter un rendu et pas quitter l'application


 
Et en surchargeant le new global? ( je sais même plus si on peut y toucher à celui là  [:ddr555] )
 
Edit: dangereux mes marrant à faire :D


Message édité par LetoII le 02-07-2003 à 12:53:20

---------------
Le Tyran
Reply

Marsh Posté le 02-07-2003 à 12:58:08    

oui ça peut etre une solution amusante, mais t'as du boulot. mais voit aussi qu'on est pas obligé d'utiliser le new global, donc encore non

Reply

Marsh Posté le 02-07-2003 à 13:01:56    

Bon rien a faire avec les exceptions, ca ne marche pas.
J'ai finalement resolu le pb avec atexit qui me detruit l'objet principal de mon prog. C'est bon pour faire le menage mais va pas falloir que je fasse autre chose apres.

Reply

Marsh Posté le 02-07-2003 à 13:05:09    

++Taz a écrit :

oui ça peut etre une solution amusante, mais t'as du boulot. mais voit aussi qu'on est pas obligé d'utiliser le new global, donc encore non


 
Après c toi qui fait ton appli, à toi de faire en sorte qu'elle enjambe pas tes mesures de sécuritées [:spamafote]


---------------
Le Tyran
Reply

Marsh Posté le 02-07-2003 à 13:05:54    

:sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed