[VISUAL C++] répéter une action sans bloquer l'application

répéter une action sans bloquer l'application [VISUAL C++] - Programmation

Marsh Posté le 12-05-2001 à 11:02:45    

J'aimerais répéter une action régulièrement une action
(toutes les 10 secondes)
mais avec un sleep, je bloque toute l'application...ce qui est normal.
Je ne sais plus quelle commande utiliser et où la placer.
 
C'est une application graphique classique.

Reply

Marsh Posté le 12-05-2001 à 11:02:45   

Reply

Marsh Posté le 12-05-2001 à 11:21:34    

Regarde du coté du message WM_TIMER et de la fonction setTimer


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-05-2001 à 11:28:33    

Si je demande plus de détails.......j'exagère ?
 
En fait je n'ai plus écris d'applique Visual depuis bientôt 2 ans,
et je ne me souviens plus comment ça marche........
 
J'ai en effet vu dans mes notes que c'est de ça qu'il faut partir,
mais j'ai pas le courage d'aller tout relire.

Reply

Marsh Posté le 12-05-2001 à 11:35:40    

Tout les objet derives entre autre d'un CWnd on acces a une fonction CWnd:: OnTimer(UINT nIDTimer)
 
Il te suffit de rajouter cette fonction (via classwizard) a ton objet et apres tu fais quand tu veux demarrer :
SetTimer(ID_TIMER, 10 * 1000);
 
ID_TIMER etant un identifiant qui te permettra de detecter quel timer est arrive a expiration, et 10 etant ton delai (a indique en milliseconde d'ou le 1000).
 
Apres dans la fonction OnTimer tu as un truc du genre
 
CWnd:: OnTimer(UINT nIDEvent) {
  if (nIDEvent == ID_TIMER) {
    // Ton code pour le traitement
  }
  else {
    CWnd:: OnTimer(nIDEvent);
  }
}
 
 
Edit : arg les smiley

 

[edit]--Message édité par VisualC++--[/edit]


---------------
VT ... Vaucluse / Vrille(euse :sarcastic: ) c'est pareil tant qu'il y a l'humour :D
Reply

Marsh Posté le 12-05-2001 à 11:46:03    

hum hum.
tout le monde utilise pas MFC comme toi.
fait une thread séparé c encore mieux


---------------
haahhahahaha == TheJackal
Reply

Marsh Posté le 12-05-2001 à 11:58:02    

Je te fait la version API windows directe alors :
 
La partie dans la boucle de traitement des messages  :

Code :
  1. HWND hwndTimer;   // handle of window for timer messages  
  2. MSG msg;          // message structure   
  3.     while (GetMessage(&msg, // message structure  
  4.             NULL,           // handle of window to receive the message  
  5.             NULL,           // lowest message to examine  
  6.             NULL))          // highest message to examine     {   
  7.         // Post WM_TIMER messages to the hwndTimer procedure.   
  8.         if (msg.message == WM_TIMER)         {
  9.             msg.hwnd = hwndTimer;         } 
  10.         TranslateMessage(&msg); // translates virtual-key codes  
  11.         DispatchMessage(&msg);  // dispatches message to window     }


 
et dans la méthode de processus messages :

Code :
  1. case WM_TIMER:     
  2. switch (wParam) {
  3.          case IDT_TIMER1:
  4.             // Process the 10-second timer.
  5.                return 0; 
  6.         case IDT_TIMER2: 
  7.            // Process the 5-minute timer.  
  8.             return 0;   
  9. }
 

[edit]--Message édité par kadreg--[/edit]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 12-05-2001 à 13:09:09    

:ouch:  :ouch:  :ouch:  
barbare !
 :ouch:  :ouch:


---------------
haahhahahaha == TheJackal
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed