Problème avec un programme de sauvegarde périodique

Problème avec un programme de sauvegarde périodique - C++ - Programmation

Marsh Posté le 22-06-2003 à 15:48:55    

salut,
j'ai écrit un programme de sauvegarde périodique. Celui-ci doit lancer une sauvegarde tous les jours à la même heure. Il est possible de lancer une sauvegarde immédiate.
Le problème... la sauvegarde immédiate fonctionne parfaitement ; par contre, la sauvegarde programmée ne fonctionne pas lorsque le temps d'attente est important (de l'ordre de 12h), mais elle fonctionne si ce temps n'est pas très important. Le déclenchement de la sauvegarde se fait grâce au timer de QT.
Je ne comprend pas pourquoi la sauvegarde immédiate fonctionne et pas la sauvegarde programmée. Y a-t-il quelque chose de particulier à gérer lorsqu'un programme reste en fonctionnement longtemps ?
merci d'avance pour votre aide !
 
PS : en utilisant le débugger, je crois que le programme plante lorsqu'il commence à écrire sur le disque dur (création d'un répertoire ou d'un fichier).

Reply

Marsh Posté le 22-06-2003 à 15:48:55   

Reply

Marsh Posté le 24-06-2003 à 15:49:59    

Je n'ai toujours pas trouvé de solution... donc je vais essayer de feinter. Je vais, à partir du programme, le relancer et éteindre celui lancé précédemment. Mais comment dois-je faire ?
J'ai essayé avec un system("nom_de_mon_prog" ) maisje ne peux pas arrêter l'autre prog...
Vu la bourde que je suis en train de faire, je tiens à préciser que je débute en c/c++ !! ;)

Reply

Marsh Posté le 24-06-2003 à 16:09:28    

Je ne sais pas trop ce que tu cherches à faire, mais si un programme doit être lancé de façon automatique avec un intervalle de temps relativement grand, je pense qu'il vaut mieux utiliser l'outil spécifique de ton OS (Cron pour Unix/Linux ou Planificateur de Tâches pour Windows).
 
Pour revenir à ton problème, es-tu sûr que le programme lance bien ta procédure de sauvegarde ? Le programme plante-t'il ou la sauvegarde n'est-elle tout simplement pas effectuée ? Essaie de transformer le temps à partir duquel ça plante en l'unité du timer et regarde si ce n'est pas une valeur particulière (> à 2^32 par exemple).


---------------
each day I don't die is cheating
Reply

Marsh Posté le 25-06-2003 à 16:16:34    

Citation :

il vaut mieux utiliser l'outil spécifique de ton OS (Cron pour Unix/Linux ou Planificateur de Tâches pour Windows).

Je voudrais bien mais il faut que le programme soit toujours dans la barre des tâches ! De plus, je ne vois pas comment utiliser les outils des différents OS...
 

Citation :

es-tu sûr que le programme lance bien ta procédure de sauvegarde ? Le programme plante-t'il ou la sauvegarde n'est-elle tout simplement pas effectuée ?

Le constructeur de la classe sauvegarde passe (il initialise toutes les variables - surtout des char *) ; mais c'est lors de la méthode de sauvegarde que ça plante, dès que le programme essaie d'écrire sur le disque dur.
 

Citation :

Essaie de transformer le temps à partir duquel ça plante en l'unité du timer et regarde si ce n'est pas une valeur particulière (> à 2^32 par exemple).

J'ai pensé à faire ça, mais ce serait beaucoup trop long. En effet, si le déclenchement de la sauvegarde n'est pas trop espacé du lancement du programme, tout se passe bien !! A chaque fois que je lance le programme la veille de son éxécution, celui-ci plante.
 
Concrètement, il y a un timer qui se reproduit toutes les minutes, de façon à afficher le temps avant la prochaine sauvegarde et dès que ce temps passe à 0 alors la sauvegarde se lance.


Message édité par kayl667 le 25-06-2003 à 16:18:10
Reply

Marsh Posté le 25-06-2003 à 16:32:45    

non mais sinon tu peux faire un soft de sauvegarde instantanée, que tu exécutes aux heures/jours voulus grâce au planificateur de tâches/cron.
 

Citation :

Je voudrais bien mais il faut que le programme soit toujours dans la barre des tâches ! De plus, je ne vois pas comment utiliser les outils des différents OS...


 
De cette manière le prog n'a pas à se trouver ds la barre des tâches (uniquement le planificateur des tâches, mais il est lancé par défaut), et l'utilisation en est on ne peut plus simple... ):

Reply

Marsh Posté le 25-06-2003 à 16:37:45    

kayl667 a écrit :

Je voudrais bien mais il faut que le programme soit toujours dans la barre des tâches ! De plus, je ne vois pas comment utiliser les outils des différents OS...


C'est bizarre comme requête... En général, on s'arrange pour dissimuler ce genre d'applications !
 

kayl667 a écrit :

Le constructeur de la classe sauvegarde passe (il initialise toutes les variables - surtout des char *) ; mais c'est lors de la méthode de sauvegarde que ça plante, dès que le programme essaie d'écrire sur le disque dur.


Tu peux expliciter un peu plus le plantage ? Il t'est peut-être possible de faire un fichier log afin de cerner un peu mieux l'erreur.
 

kayl667 a écrit :

J'ai pensé à faire ça, mais ce serait beaucoup trop long. En effet, si le déclenchement de la sauvegarde n'est pas trop espacé du lancement du programme, tout se passe bien !! A chaque fois que je lance le programme la veille de son éxécution, celui-ci plante.
Concrètement, il y a un timer qui se reproduit toutes les minutes, de façon à afficher le temps avant la prochaine sauvegarde et dès que ce temps passe à 0 alors la sauvegarde se lance.


C'est sûr que c'est le type d'erreur qu'il n'est pas facile de debugger. C'est pourquoi il va falloir faire un log très précis (afin de cerner au mieux l'erreur).
Tu parles de "lancer le programme la veille de son éxecution", vérifie que ce ne soit pas un problème dû au passage à minuit (00:00:00).
En gros, il va te falloir analyser au mieux ton programme (en se concentrant surtout sur la différence timer court/timer long.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 26-06-2003 à 00:20:37    

tu as essayer avec un timer ?

Reply

Marsh Posté le 26-06-2003 à 01:04:31    

Citation :

tu as essayer avec un timer ?

oui, avec celui de QT mais j'ai du mal gérer la mémoire...
Enfin, c'est bon je vais faire comme vous me l'avez proposé. Je vais voir avec les planificateurs de tâches de windows (at) et linux(cron). De cette manière, le soft sera mieu conçu et stable.
Merci beaucoup de votre aide ! :jap:

Reply

Sujets relatifs:

Leave a Replay

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