Problème avec la fonction callback du timer

Signaler
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007
-
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007
-
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 les trames ethernet, les stock dans un buffer annexe et lorsque ce buffer est plein je l'envoi sur une carte qui va faire la conversion.

Mon problème survient au moment de l'envoi de la dernière trame reçue, si cette trame ne remplis pas le buffer il n'est jamais envoyé. C'est pourquoi j'ai voulu mettre en place un timer qui me permettrai d'envoyer mon buffer si je ne reçois plus de trame pendant X milisecondes.

Information :  j'utilise les MFC

Maintenant, voila mon soucis :

J'utilise un paquetage ou je stock mes fonctions afin de les appelées depuis mon dialogue box, ces fonction n'apartiennent donc à aucune classe. J'ai pu initiliser un timer avec la fonction :

 TimerID = SetTimer (NULL, 1, Temps_timer,(TIMERPROC)TimerProc);

Lors du time out la fonctione TimerProc devrai donc être appelée. J'ai vérifié la valeur de mon TimerID et il ne vaut pas 0, le timer est donc bien crée.

La ou le problème survient c'est que je n'arrive jamais dans la fonction de callback.

Ma fonction callback :

void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
      (Traitement ici)
}

Auriez-vous une idée de pourquoi ma fonction de callback n'est jamais appelée ?

4 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Dixit Platform SDK:
If your application creates a timer without specifying a window handle, your application must monitor the message queue for WM_TIMER messages and dispatch them to the appropriate window.

Donc faut que ta boucle de message soit en train de tourner; si ca te pose problème, tu peux créer un nouveau thread poiur faire ca.
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007

Salut,
Lorsque tu parles de la boucle des messages c'est à cette boucle que tu fais référence ?

while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

Si oui, j'y ai testé et dans le traitement je ne reçois jamais de message WM_TIMER cela dis...j'y ai peut-être pas mis au bon endroit.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
C'est de cette boucle que je parlais; simplement ça dépend de l'endroit ou elle est effectivement; il faut que ton code soit dans la boucle pendant qu'il attend les trames...je suppose que pour l'instant tu es dans une espèce de truc semblable mais pour le réseau, alors il faut que tu traites réseau et messages windows dans la même boucle. Mets voir le bout de code en question si tu veux.
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007

Le code de ma boucle d'acquisition des trames ?

J'utilise winpcap donc ça donne un truc du genre :

 while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0)
{
   if(res == 0)
   // Timeout elapsed
   continue;
  
   [Affichage de la trame]

   [Traitement]

 }

Il faudrai donc que je mette la boucle des messages la dedant ? Ca risque pas de tout me bloquer ?