Aide - Recherche - Membres - Calendrier
Version complète : [PROGRAMMATION] Equivalent d'un daemon Linux
CandiULB > Discussions Générales > Autres Discussions > Divers > Informatique > Windows (toutes versions)
Ryo Saeba
Salut smile.gif
Voilà, en fait, j'aimerais votre avis sur la manière de programmer un certain truc...
Il faut que ça tourne sous windows XP SP2...

En fait, ai beosin d'un programme qui tourne en permanence et qui, toutes les heures, fait un truc bien précis (otut le temps le même)
La question, c'est : comment vous feriez pour qu'il ne bouffe pas de ressources quand il fait rien (--> pas une boucle avec l'heure comme condition de sortie par exemple) et qui se réveille toutes les heures pour faire ce que je veux qu'il fasse...

Alors pitié, me répondez pas d'utiliser le planificateur de tâche, il donne le focus au programme qu'il ouvre toutes les heures et donc si suis occuppé à faire qqch (surtout si c'est en plein écran), ça me fait sortir et c'est très lourd...

Donc ???
Chais pas trop comment j'pourrais faire sad.gif
Quelqu'un a une idée ?
(En fait, toutes les heures, il doit exécuter un script PHP sur mon serveur et stocker l'output dansun fichier de log)
Pour le moment, j'ai un script qui fait ça et qui est appelé toutes les heures par le planificateur de tâches

Code
@echo off
set LOGFILE="../digest_log.html"
echo ^<U^>^<B^> >> %LOGFILE%
date /t >> %LOGFILE%
echo ,  >> %LOGFILE%
time /t >> %LOGFILE%
echo ^</B^>^</U^> >> %LOGFILE%
echo ^<BR/^> >> %LOGFILE%
wget -q -O - [url="http://127.0.0.1/mail_digests.php"]http://127.0.0.1/mail_digests.php[/url] >> %LOGFILE%
echo ^<HR/^> >> %LOGFILE%
exit


Veux bien des solutions dans n'importe quel langage, m'adapterai, y'a pas de prob de ce côté là (même si le langage de prédilection est le Delphi)

Merci pour les idées smile.gif
spacewalker
ce que tu comptes faire s'apparente à un service ... sous unix il y a un systeme "cron" qui sert à plannifier les taches d'administration systeme, je ne sais pas si il y a l'équivalent sous NT. En tout cas nt possede un gestionnaire de services qui sont accessibles via des API (j'ai essayé une fois mais je saurais plus te dire exactemet comment). Ce que je ferais c'est un programme du genre
Code
int temps=3600;
int timer=time(NULL);
while(time(NULL)<timer+temps){
   sleep(3600-(time(NULL)-timer));
}
Ryo Saeba
ben le Cron, c'est l'équivalent du planificateur de tâches donc non, ça marche pas ça :-/
L'autre technique, ai pas vraiment essayé...
Un truc genre :
Code
for (;;)
{
   sleep(3600);
   action();
}


Mais bon, y'a forcément une manière plus propre de faire les choses...
Surtout que souvent (en tout cas, si me souviens bien, c'était le cas en Basic et dérivés), la commande sleep freeze un peu la machine et j'ai pas envie de tout freezer pendant une heure biggrin.gif

J'dirais qu'effectivement, il faut chercher du côté des services mais sais pas du tout comment fonctionne la programmation orientée services :-/
Si qq1 a des tutoriaux sur le sujet, m'intéresse (même si ça résoud pas forcément mon problème, ça m'a toujours intéressé biggrin.gif)

peux essayer de modifier mon bat en un truc style :

Code
@echo off
set LOGFILE="../digest_log.html"

:begin
echo ^<U^>^<B^> >> %LOGFILE%
date /t >> %LOGFILE%
echo ,  >> %LOGFILE%
time /t >> %LOGFILE%
echo ^</B^>^</U^> >> %LOGFILE%
echo ^<BR/^> >> %LOGFILE%
wget -q -O - [URL=http://127.0.0.1/mail_digests.php]http://127.0.0.1/mail_digests.php[/URL] >> %LOGFILE%
echo ^<HR/^> >> %LOGFILE%

sleep(3600)
goto begin


Mais bon, ai un peu peur ça merde bien biggrin.gif
vais essayer ça tiens biggrin.gif
Mais toutes les autres idées sont toujours les bienvenues tongue.gif
spacewalker
en fait le sleep t'es pas assuré que ca retourne exactement apres la periode de temps donnée en param, c pour ca que j'ai mis une boucle dans mon code. Mais en tout cas sur n'importe quel OS evolué (bien que j'ai des doutes mais je rentre pas dans le troll) le sleep place le process en attente complete.
Ryo Saeba
Vais chipotter et essayer un peu, logiquement ça devrait effectivement aller et comme de toute façon, c'est pas grave si c'est pas exactement 1h, ça va pas poser de problème smile.gif
essaierai dés que serai chez moi tongue.gif
Et nan, pas de Troll et nan, j'utiliserai aps Windows ;p
[EDIT]Et nan, pas de Troll et nan, j'utiliserai aps Linux ;p
[/EDIT]
sauctomat
Il y a moyen d'interdire l'accès au forum windows à certains inutiles?

http://cronw.sourceforge.net/

et

http://www.kalab.com/freeware/pycron/pycron.htm


Sinon en général les gens parlent de faire un service avec un timer.
Ryo Saeba
C'est finalement ce que j'ai fait wink.gif
Un service avec un timer et ça marche relativement bien smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2012 Invision Power Services, Inc.