impossible de catcher une exception - C++ - Programmation
Marsh Posté le 02-07-2003 à 11:08:59
Ben avec un chtit bout de code se serait plus facile.
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
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>
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.
Marsh Posté le 02-07-2003 à 11:29:47
chrisbk a écrit : |
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?
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? |
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 !
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 ), ben je trouve ça pas plus mal qu'un de tes callback lance une exception
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 ), 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 ?
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.
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
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 |
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.
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
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à )
Edit: dangereux mes marrant à faire
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
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.
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
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 , 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