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 :

Conseil: point de restauration en cas de plantage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut Conseil: point de restauration en cas de plantage
    Bonjour,

    J'ai un programme qui fait des traitements informatiques (sauvegardes, modifications, envois par FTP, ...).

    Le programme peut comporter des erreurs critiques qui nécessite un arrêt de ce dernier et affiche le message d'erreur qui permettra de résoudre le problème et ainsi reprendre où j'en étais avant le plantage.

    Pour celà, je crée des points de restauration que je stocke dans un fichier ini. Quand je lance le programme, je lis le fichier et sais à quel endroit je dois continuer mon programme.

    Cependant, je ne sais pas comment le mettre en place. Pointeur de fonction?

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void main_func()
    {
        func1();
        func2();
        if (func3())
        {
            func4();
            func5();
        }
        else
            func6();
        func7();
    }
    Je ne vois pas comment faire pour reprendre le traitement à func4() par exemple. Comment procéderiez vous?

    Merci d'avance.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Cela me parait difficile. Es-tu obligé de terminer le programme après une erreur critique ? Il serait plus simple que le programme continu de tourner, et reprenne juste au début de la fonction courante. L'idiome RAII + les exceptions doivent aider à cela.

    Sinon il faudrait modéliser le traitement par un ensemble de taches. La présence de if/else implique plusieurs chemins possibles et donc une structure de graphe. Un point de restauration est alors un sommet de ce graphe qu'il suffit de sérialiser pour pouvoir reprendre l'exécution au même endroit.

  3. #3
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Tu as raison, le RAII semble la meilleure solution. Le système de graphe compliquerait énormément le code et ça risque de devenir très rapidement un véritable fouillis !

    Je pense que je vais donc mettre en place ce système. Le programme sera en attente le temps que l'utilisateur règle le problème, puis relancera la partie incriminée.

    Merci pour ton conseil

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Peut etre pourrais tu travailler sur une idée de DP "memento" mais... à l'envers...

    Je m'explique:
    Le memento va rajouter ce qui a été fait chaque fois que tu fais quelque chose, afin de pouvoir effectuer un "roll back" des différentes actions, dans l'ordre dans lequel elles ont été effectuées.

    Tu pourrait commencer par créer une liste des actions à effectuer, et à chaque fois qu'une action est terminée, tu écrit dans le fichier quelle action vient de se finir.

    De cette manière, après plantage, tu lit la dernière action correctement effectuée, et tu reprend l'exécution de ce qui reste à faire

    Tu aurais donc plusieurs fichiers ini différents:

    Le premier consisterait à donner l'ensemble des actions à effectuer (copier tel fichier à tel endroit, renommer tel autre, effacer un troisieme, déplacer tel répertoire, transmettre par ftp,...) à chaque fois.

    Un autre servirait de "log" pour indiquer (à toi et au programme) ce qui a été fait et (éventuellement) les problèmes à résoudre.

    Lorsque tu lance l'application, tu charge le "script" (l'ensemble des actions), puis tu récupère le dernier point de sauvegarde, et tu n'a "plus qu'à"...continuer à partir de ce point
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Sinon, pour la "reprise" d'exécution comme ça, tu peux faire une machine à états. Ainsi, tu sauvegardes l'état dans lequel tu es, et tu peux recharger cet état ensuite...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sinon, pour la "reprise" d'exécution comme ça, tu peux faire une machine à états. Ainsi, tu sauvegardes l'état dans lequel tu es, et tu peux recharger cet état ensuite...
    Comment ça marche?

  7. #7
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    Peut etre pourrais tu travailler sur une idée de DP "memento" mais... à l'envers...

    Je m'explique:
    Le memento va rajouter ce qui a été fait chaque fois que tu fais quelque chose, afin de pouvoir effectuer un "roll back" des différentes actions, dans l'ordre dans lequel elles ont été effectuées.

    Tu pourrait commencer par créer une liste des actions à effectuer, et à chaque fois qu'une action est terminée, tu écrit dans le fichier quelle action vient de se finir.

    De cette manière, après plantage, tu lit la dernière action correctement effectuée, et tu reprend l'exécution de ce qui reste à faire

    Tu aurais donc plusieurs fichiers ini différents:

    Le premier consisterait à donner l'ensemble des actions à effectuer (copier tel fichier à tel endroit, renommer tel autre, effacer un troisieme, déplacer tel répertoire, transmettre par ftp,...) à chaque fois.

    Un autre servirait de "log" pour indiquer (à toi et au programme) ce qui a été fait et (éventuellement) les problèmes à résoudre.

    Lorsque tu lance l'application, tu charge le "script" (l'ensemble des actions), puis tu récupère le dernier point de sauvegarde, et tu n'a "plus qu'à"...continuer à partir de ce point
    C'est exactement ça. Finallement, je me rend compte, que c'est possible que le programme a parfois besoin de se terminer plus tard, donc reprendre où j'en étais.

    Concrètement, j'ai des dizaines de fonctions que je lance les uns après les autres. Et j'ai un fichier ini qui se présente de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Etapes]
    Etape01=Debut
    Etape02=func01
    Etape03=func02
    Etape04=func03
    Etape05=func04
    Etape06=func05
    Etape07=func06
    Etape08=func07
     
    [Param]
    Etape=Etape03
    Le champ param me dit où commencer l'exécution.
    Ce qui reste à savoir, c'est comment commencer l'exécution à partir de la fonction en question. Mettre un système de flag (booléen) et dans chaque fonction tester si le flag correspond, si ce n'est pas le cas, skipper la fonction et aller à la suivante et une fois trouvée, poursuivre le traitement?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 12/06/2007, 14h28
  2. Points de restauration système & disque dur renommé
    Par mchk0123 dans le forum Windows Vista
    Réponses: 26
    Dernier message: 21/05/2007, 23h03
  3. Relancer grub sur un autre noyau en cas de plantage
    Par toffff dans le forum Debian
    Réponses: 1
    Dernier message: 19/03/2007, 22h13
  4. [XP] Absence de points de Restauration du systeme
    Par freud dans le forum Windows XP
    Réponses: 5
    Dernier message: 29/05/2006, 01h34
  5. point de restauration
    Par PoOky dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 02/09/2005, 17h26

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