IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Exception generee dans librairie C


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut Exception generee dans librairie C
    Bonjour,

    J'ai fait une recherche dans le forum avant de poser la question mais je n'ai rien trouvé.

    En fait, j'essaie d'utiliser dans du code C++ une librairie C. Jusque là aucun souci. Le truc c'est que l'appel à une fonction de cette librairie ne doit pas durer indéfiniment. C'est à dire qu'un temps maximal est autorisé. Au-delà de ce temps, cette fonction doit s'arreter.

    J'ai donc "encapsuler" l'appel dans un try { } catch {} avec un timer_create et timer_settime pour generer l'exception.
    Si le code à l'intérieur du try {} est du C++, j'attrape bien l'exception. Tout se déroule comme prévu. Par contre si j'utilise la librairie C, le binaire crashe au lieu de reprendre le code à partir du catch {}.
    J'en ai déduit que le problème venait de la prise en compte de l'exception par le C, ce qui est somme toute assez logique. Je n'ai par contre pas trop d'idée afin de régler ce souci. Quelqu'un en a une ?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je ne connais pas trop les fonctions timer que tu utilises, ni sous quel OS, mais j'ai du mal à voir comment c'est sensé marcher. Dans les systèmes de timer que je connais :
    - Soit ton timer poste un message vers le process, mais pendant l'appel à la fonction, le process ne lira pas les messages...
    - Soit le timer déclenche l'appel d'une fonction dans un thread crée pour, et dans ce cas, je ne vois pas comment l'exception pourrait se propager au thread qui t'intéresse...
    - Soit le timer provoque une interruption, et sortir d'une interruption par une excption n'est généralement pas possible...

    Pour ton problème, je partirais plus dans l'idée de lancer la fonction dans un thread à part, et dans le thread principal d'attendre soit la fin du thread de calcul, soit l'expiration du timer. Ensuite, tu peux décider soit de tuer le thread s'il n'a pas donné de résultats (avec les risques que ça comporte), soit de le laisser tourner dans le vide.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'avais posé la même question il y a quelques mois...

    ->http://www.developpez.net/forums/sho...9&postcount=15

    Il semblerait que sous Windows il y aie une solution, sinon c'est dur, très dur...

  4. #4
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut
    C'est pour du code sous Linux...... malheureusement apparemment

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Si tu es sous Linux, il est vraisemblable que ton timer genere un signal et donc que tu lances une exception. Comme Loic, il ne me semblait pas possible de faire cela. Mais si ca marche avec du C++, essaie de compiler le C avec l'option -fexceptions, il y a des chances pour que ca marche avec la meme definition de marcher que celle que tu utilises pour le C++.

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Salut,

    J'ai été confronté à ce type de probléme et ma solution vaut ce quelle vaut, pas trés élégant, mais ca fonctionne.

    Dans ma routine en c que je veux stopper, je fait un log(0); ca génére une excpetion mamthématique.
    dans mon programme C++ j'intercepte les excpetions mathematique avec la fonctions : int _matherr (struct _exception *a) { .... }
    Dans cette focntion je regénere une exception cette fois classique que j'intercept dans mon code en C++.

    Tordu , je vous l'accorde, mais ca marche superbien.

Discussions similaires

  1. [Forms6] Variable global dans librairie
    Par Nargel33 dans le forum Forms
    Réponses: 3
    Dernier message: 02/04/2007, 19h37
  2. [Debutant]Exception NoClassDefFoundError dans main
    Par Mystnux dans le forum Langage
    Réponses: 4
    Dernier message: 17/06/2006, 12h24
  3. [SGBD] FPDF+enregistrer le pdf généré dans BDD MySQL
    Par Flushovsky dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 29/11/2005, 16h22
  4. Catcher une exception lancée dans un plugin
    Par :Bronsky: dans le forum C++
    Réponses: 8
    Dernier message: 18/01/2005, 00h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo