Accueil > Forum > > > > Probleme de timer avec fonction de callback
Probleme de timer avec fonction de callback
mercredi 2 août 2006 à 11:28:58 |
Probleme de timer avec fonction de callback

julienbj
|
Bonjour, j'ai un petit souci lors de la création d'un timer avec une fonction de callback.
Voici un bout de code qui ne fonctionne pas, mais je ne vois pas pourquoi. Au debuggeur, j'ai testé les valeurs de retour de SetTimer et KillTimer, aucun souci, pourtant je ne rentre jamais dans la fonction de callback (point d'arret).
VOID CALLBACK Timer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { printf(".\n"); }
DWORD WINAPI ThreadProc(LPVOID lpParameter) { unsigned int id; MSG msg;
printf("Création du thread\n"); id = SetTimer(NULL, 0, 100, Timer); while (GetMessage(&msg, NULL, 0, 0)); KillTimer(NULL, id); printf("Fin du thread\n"); return 0; }
int main(void) { DWORD ThID; HANDLE hTd;
hTd = CreateThread(NULL, 256, ThreadProc, NULL, 0, &ThID); while (!_kbhit()); TerminateThread(hTd, 0); return 0; }
Cependant, si je ne mets pas de fonction de callback et que j'intercepte le message WM_TIMER dans la boucle while avec le GetMessage, je n'ai pas de problèmes.
Si vous pouviez m'indiquer pourquoi ma fonction de callback n'est pas appelé, ce que j'ai mal fait... Merci d'avance
Vive le C Savon
|
|
mercredi 2 août 2006 à 11:45:30 |
Re : Probleme de timer avec fonction de callback

julienbj
|
Réponse acceptée !
Ok, c'est bon, j'ai trouvé.
Comme quoi, il faut demander de l'aide pour avoir une idée ;)
Bref, il y avait 2 problemes. Dans le SetTimer, il manquait un & devant la fonction de callback, et dans la boucle while(GetMessage...), il falait rajouter bien évidemment de quoi transmettre les messages:
TranslateMessage(&msg);DispatchMessage(&msg);
Vive le C Savon
|
|
mercredi 2 août 2006 à 16:44:23 |
Re : Probleme de timer avec fonction de callback

aardman
|
Salut,
Je vois pas vraiment l'utilité du timer ici, tu aurais aussi pu faire une boucle infinie avec un Sleep(100) et un printf(), non?
|
|
jeudi 3 août 2006 à 17:57:10 |
Re : Probleme de timer avec fonction de callback

julienbj
|
Oui, evidemment, ce bout de code ne servait d'exemple que pour expliquer mon problème.
Vive le C, Savon
|
|
mercredi 9 août 2006 à 15:12:58 |
Re : Probleme de timer avec fonction de callback

Oliv_Nav
|
bonjour !
ca m'intéresse, votre histoire. Y'a quelquechose qui m'échappe : quelle est l'utilité de Settimer ?
Pour moi, ca lancait comme un mini thread caché, qui émettait des evenements périodiquement. Ces evenements allaient réveiller la fonction en call back.
Mais à partir du moment ou on met ca derriere :
while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
on reste bloqué sur le while. Du coup, le déroulement dans le thread en cours est interrompu.
Bref, pour poser une question, est-il possible d'obtenir le fonctionnement que je decris plus haut (mon mini thread caché), ou dois-je créer carrément un thread (dans ce cas, j'ai vraiment du mal à saisir l'intéret de Settimer, vis à vis d'un Sleep) ?
Merci et bonne journée
Olivier
|
|
mercredi 9 août 2006 à 17:00:22 |
Re : Probleme de timer avec fonction de callback

Oliv_Nav
|
je reviens juste sur ce que j'ai écrit : j'ai l'air de faire la meme remarque que aardman ; sauf que lui, il a compris l'intéret des settimer dans le cas général. Pas moi. Je viens donc chercher des infos plus général, pour comprendre comment on est censé se servir de cette fonction
Merci
Olivier
|
|
mercredi 9 août 2006 à 17:25:33 |
Re : Probleme de timer avec fonction de callback

aardman
|
Salut,
L'intéret de ce type de timer, c'est qu'il est très facile à utiliser,
mais par contre on est obligé de l'utiliser dans un thread qui possede
une boucle de message (comme celle de ton post), car les evenements du
timer sont recus et traités sous forme de messages windows.
|
|
jeudi 10 août 2006 à 11:35:28 |
Re : Probleme de timer avec fonction de callback

Oliv_Nav
|
merci pour ta réponse, mais je vois pas encore bien.
Pourrais-tu me donner un exemple dans lequel il est plus malin d'utiliser "setTimer" plutot que "while() Sleep(xxx) SetEvent(xxx)" ?
merci !
|
|
jeudi 10 août 2006 à 15:19:05 |
Re : Probleme de timer avec fonction de callback

Oliv_Nav
|
il me vient une autre remarque / question : quand je fais un thread, j'aime bien ne pas rester bloqué à l'intérieur (que ce soit dans un Sleep ou un getMessage) : je me met en attente d'evenement. quand j'en recois un, je fais vite mon traitement, et me remet en attente.
Ca permet d'etre presque toujours dispo aux evenement.
La, tout le temps ou je suis dans le Sleep, ou le while GetMessage), je n'ecoute rien d'autre. Ca me chiffonne, parce que j'aimerais bien recevoir un message qui me permette d'arreter le thread proprement et rapidement.
Comment gérer cet arret de thread au moment ou le message d'arret arrive ?
|
|
jeudi 10 août 2006 à 18:41:58 |
Re : Probleme de timer avec fonction de callback

aardman
|
Salut,
Tu sembles parler de Sleep() et de GetMessage() comme qu'ils avaient la
même fonction et qu'ils bloquaient le thread de la même facon.
Sleep() est une fonction qui bloque completement le thread, pendant un
temp bien determiné. GetMessage(), par contre, bloque le thread jusqu'a
ce qu'un message soit posté dans la pile de message du thread. Si ce
message est WM_QUIT, GetMessage() retourne FALSE (ce qui a pour effet
de sortir de la boucle de message). Sinon, GetMessage retourne TRUE, et
le message est traité (généralement, par TranslateMessage() et
DispatchMessage()).
Pour en revenir aux timers, SetTimer() génere ses evenements sous forme
de message windows, et donc il est parfait pour s'integrer dans un
thread qui a une boucle de message.
Pour ta question sur le thread, tu peux le faire avec une boucle de message.
Pour terminer ton thread, it te suffit d'envoyer un WM_QUIT a ton thread.
Un dernier truc: il existe d'autres types de timers sous windows: SetWaitableTimer(), CreateTimerQueueTimer(), ...
|
|
Cette discussion est classée dans : fonction, timer, printf, callback, dword
Répondre à ce message
Sujets en rapport avec ce message
Passer un pointeur sur une instance à une fonction membre static ? [ par tintin72 ]
Bonjour, j'ai un problème pour passer un pointeur sur une instance ou l'adresse de l'instance à une fonction callback Windows. Je m'explique J'ai créé
Utilisation de fonctions Callback [ par N0euX ]
Bonjour a tous,</o:
Problème avec la fonction callback du timer [ par Arkadias ]
Bonjour tout le monde, je suis confronté à un problème de timer.Voila la situation :Dans le cadre d'un projet de conversion de protocole, je récupère
gluttimerfunc et sections critiques... [ par thespartan ]
Bonjour. Je veux faire des animations en fonction du temps écoulé... D'une part j'ai ma fonction principale d'affichage : affichage ( ){ dessineBoule(
Appel fonction avec GTK+ [ par ptityo31 ]
Bonjour,je débute sur GTK+, et j'aimerai avoir des précisions sur le lancement d'une application à partir d'un clic.En effet je dois envoyer des trame
Printf & Puts [ par dayvid75014 ]
Bonjour à tous,Quelqu'un connait-il la difference entre la fonction printf et la fonction puts ?Merci.
PROBLEME GESTION DE FILE !!!!!!!!! [ par POWERC85 ]
Bonjour à tous, Voilà je suis débutant en langage C et j'ai un travail à faire sur les Files... On me demande de faire : 1 fonction qui permet d'ajout
besoin d'aide Timer [ par wadwin ]
Salut a tous j'ai un souci avec les <span class="spellmod" title="Faute d'orthographe - suggestions : dîners, tiers, rimeurs, tumeurs, tuners, dîne
Timer & service [ par deck_bsd ]
Bonjour à tous.Voici mon problème,J'ai crée un timer dans mon service, mais celui-ci ne fonctionne pas (je suis certain que c'est le timer car j'ai te
Timer sous visual c++4.0 [ par leuk ]
Bonjour à tous,Je développe sur un microprocesseur équipé d'un OS windows CE. Cependant je voudrai utiliser son timer pour caluculer un débit toutes l
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|