Bonjour à tous !!
J'ai passé les quatre dernières années, si pas les cinq dernières années à travailler en java, et je me disais, comme j'avais déjà un bon niveau en c++ que ça allait aller tout seul, comme le vélo cela ne s'oublie pas...
Mon soucis est le suivant:
un pote m'a demandé de lui donner un coup de main pour trouver le moyen de relancer un service qui s'éteint toutes les heures (je ne veux pas savoir pourquoi), sous XP.
Retroussant mes manches, j'ai écris un service qui va s'occuper de faire un "poll", un test sur l'état du service en question (dont les paramètres se trouvent dans un fichier .ini) en fonction d'un laps de temps défini dans ce fichier .ini.
J'ai perdu un temps fou avec SetTimer(...) pour finalement écrire une nouvelle fonction qui fonctionne, évidement. (C'est une fonction qui lance un thread qui attend le temps imparti et qui renvoi un message disant, ok j'ai fini, tout bête). Ca marche donc...
Mais ce qui ne me va pas c'est que SetTimer(...) n'a jamais voulu fonctionner.
Et en regardant dans le MSDN j'ai pourtant un très bon niveau d'anglais, il est spécifié qu'on peut utiliser une fonction "user function" utilisateur comme dernier paramètre à être exécutée une fois le temps imparti écoulé... et bien après mille essais... rien !! La fonction n'a jamais été exécutée !!
Pourtant SetTimer renvoie un numéro de HANDLE valide, mais quoi que je fasses, il ne se passe tout bonnement rien !! En plus le débugging d'un service c'est pas de la tarte (pas de fenêtres, certains événements peuvent être générés dans l'observateur d'événements, mais bon dans les Threads ou dans les fonctions qui n'héritent pas de CModule c'est plus compliqué -- sujet d'un autre post aussi à mon avis, besoin de me rafraîchir la mémoire)...
Si quelqu'un à déjà utilisé SetTimer AUTREMENT QUE DANS UN ENVIRONNEMENT FENETRE (là c'est facile, WM_TIMER et hop ! le tour est joué ! Ici on est dans un SERVICE, c'est vraiment pas simple) peut-il me dire comment il a signé la fonction qui sera exécutée après que se soient écoulées les millisecondes imparties et me donner des infos sur ce qu'il s'est passé, je comprends vraiment pas...
Voici les éléments utiles:
Notez que j'ai plus trop l'habitude des casts et consors en c++ depuis mes premiers pas dans Java, j'en ai plus eu trop besoin... il doit y avoir un soucis mais je vois pas où... c'est ça le hic... même si mon truc marche, j'aimerais savoir pourquoi j'ai dû écrire moi-même (boh, ça m'a pris deux minutes, mais bon) une fonction de type SetTimer() ??Prototype de la fonction censée être exécutée:
void MaFonction(void);
Note: j'ai tout essayé en ce qui concerne la déclaration de cette fonction de manière à ce que ça passe au niveau du compilateur, il y a bien eu quelques soucis pour "typer" correctement le fameux 4eme paramètre de la fonction SetTimer(...). Même d'écrire une fonction du type CelleCi(HWND,UINT,UINT,TIMERPROC)... mais c'était tout aussi vide de résultat...
...
UINT numTimer=SetTimer(NULL,0,TempsImparti*1000,(TIMERPROC)&MaFonction);
...
void MaFonction(void)
{
......choses intéressantes......}
Merci de voir cela avec moi... je suis ouvert à toutes discussions
Jah guidance and itection, everytime !
Partager