Tu peux effectivement utilise des timers (dans le cas ou t2 est une periode et pas une heure fixe, c'est a dire, dans 10 minutes par exemple, et pas : a 15h37'43'').
Pour ce qui est de SetTimer(), je vois pas le manque de souplesse que tu lui reproches. (c'est pas une remarque aggressive hein, qu'il n'y est pas de malentendu. C'est juste ... que je vois pas. Precise un peu plus ce que tu voudrais)
SetTimer genere bien un WM_TIMER, mais tu peux aussi faire appel a une fonction CALLBACK a toi que t'as fait tout seul. C'est tres pratique, surtout si tu ne geres pas les events de Windows.
Ca devient un peu plus complexe, syntaxiquement parlant, mais une fois que t'auras trouve la bonne facon de declarer tout ca, ca marche comme sur des roulettes.
je vais te donner un exemple. Mais par contre, j'ai pas utiliser SetTimer, mais timeSetEvent(), qui est plus precis au niveau timer. Le systeme est presque la meme (mais la syntaxe est un peu differente quand meme).
timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent );
uDelay : le temps en millisecondes de ton timer.
uResolution : mettre 0 pour etre ultra precis ou plus, pour l'etre moins (j'ai pas trop bien vu de differences ... a faire attention peut etre).
lpTimeProc : la fonction CALLBACK appele a chaque uDelay.
dwUser : si t'avais un parametre a passe a ta fonction CALLBACK, c'est la qu'il faut le mettre.
fuEvent : les options de ton timer : TIME_ONESHOT si tu veux qu'il marche qu'une seule fois, TIME_PERIODIC si tu veux qu'il marche ... periodiquement. ( quelle perspicacite ! )
Il faut pas oublier de faire un timeKillEvent(Id) de l'Id retourne par timeSetEvent() pour arreter le timer.
Le plus galere, c'est de declarer ta fonction CALLBACK.
Faut faire attention, elle ne doit pas etre membre d'une classe. En tout cas, je te le deconseille, car ca m'a fait une erreur qui m'a bloque pendant longtemps.
Ta fonction DOIT etre declaree comme ceci :
void CALLBACK fonctionCallBack( UINT Id,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2))
T'es pas oblige de mettre de vrais parametres, c'est pas grave, mais il faut qu'ils soient tous la.
tu peux mettre le code que tu veux executer dedans.
Ensuite, voici comment tu fais appel a ton timer :
timeSetEvent( taDuree, 0, taFonctionCallback, 0, TIME_PERIODIC);
tu ne dois pas mettre de parentheses pour ta fonction, car c'est son adresse que le timer recupere.
Ch'ni p'tite astuce :
Si tu veux utiliser l'instance de la classe qui lance le timer, tu peux la passer en parametre de ton timer comme ca :
timeSetEvent( taDuree, 0, taFonctionCallback, (DWORD) this, TIME_PERIODIC);
Voila, si t'as toujours des problemes, re-post.
Bonne prog.
Partager