Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1482 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Utilisation de timer sous Visual C++ avec API Win32

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Utilisation de timer sous Visual C++ avec API Win32

n°387251
Piemur2000
Posté le 08-05-2003 à 16:45:02  profilanswer
 

Bonjour,
 
J'ai besoin d'utiliser un timer dans une application Win32. J'ai ecris le code suivant pour l'activer :
 

Code :
  1. SetTimer(NULL, IDT_TIMER, 500, (TIMERPROC) NULL);


 
et ca dans ma fonction callback :
 

Code :
  1. case WM_TIMER:
  2.     switch (wParam)
  3.     {
  4.         case IDT_TIMER:
  5.             ...
  6.             break;
  7.     }
  8. break;


 
Mais aucun message WM_TIMER n'est créé donc ca fait rien. Est ce que je me suis trompé quelque part???
 
Une autre petite question, y a t'il une periode à partir de laquelle ca ne sert à rien de decendre ou est ce que le timer fonctionne tres bien jusqu'a 1ms?
 
Merci

mood
Publicité
Posté le 08-05-2003 à 16:45:02  profilanswer
 

n°387267
Konar
Posté le 08-05-2003 à 17:02:47  profilanswer
 

ptet le 1er parametre de SetTimer(), faudrait ke ca soit le handle de la fenetre ki prend en compte le timer.

n°387273
mrbebert
Posté le 08-05-2003 à 17:06:56  profilanswer
 

Je pense pas qu'on puisse descendre jusqu'à 1 ms avec les timers.
Je crois que la précision ne descend pas sous les 50-60 ms.

n°387274
Piemur2000
Posté le 08-05-2003 à 17:07:40  profilanswer
 

J'avais essayé aussi avec le handle de la fenetre mais ca marche pas non plus.
 
Sinon y'a pas un autre moyen de faire un timer en C++, il me faudrais un truc assez rapide quand meme.

n°387383
VisualC++
J'va y penser ...
Posté le 08-05-2003 à 19:22:28  profilanswer
 

ben deja ton ::SetTimer(hwnd, IDDETONTIMER, iTempsMilisecond, NULL) il retourne normalement IDDETONTIMER si c ok, tu le test ?
 
Sinon tu le Set a partir de koi ? (enfin ds une classe si c derive de CWnd tu peu utilsier SetTimer(IDDETONTIMER, iTempsMillisecond, NULL) aussi).

n°387493
chrisbk
-
Posté le 08-05-2003 à 20:59:51  profilanswer
 

VisualC++ a écrit :

ben deja ton ::SetTimer(hwnd, IDDETONTIMER, iTempsMilisecond, NULL) il retourne normalement IDDETONTIMER si c ok, tu le test ?
 
Sinon tu le Set a partir de koi ? (enfin ds une classe si c derive de CWnd tu peu utilsier SetTimer(IDDETONTIMER, iTempsMillisecond, NULL) aussi).


 
tu t'emballes, regarde le titre, c de l'api win32 :D
 
(bon ca change rien a la validité de ta remarque sur le test du code de retour)

n°387521
VisualC++
J'va y penser ...
Posté le 08-05-2003 à 21:18:28  profilanswer
 

D'ou l evocation des 2 fonctions :whistle:

n°387562
Piemur2000
Posté le 08-05-2003 à 21:56:29  profilanswer
 

Bah c ca que je ne comprend pas, dans MSDN y'a marké que si ca marche ca retourne un nombre different de 0. G verifié et ca retourne bien une valeur ... mais ca marche pas :??: . Je comprend pas... :(

n°387571
VisualC++
J'va y penser ...
Posté le 08-05-2003 à 22:00:32  profilanswer
 

Ben si la valeur de retour = IDDETONTIMER c bon.
 
Maintenant tu parles de ta fonction callback mais c laquelle ?
Car soit c une vrai callback et c'est pas NULL que tu dois passer au SetTimer, sinon c ds la message queue que tu recup.
 
MAis ton code un poil lege la pour voir.

n°387594
Piemur2000
Posté le 08-05-2003 à 22:12:47  profilanswer
 

C dans la fonction callback principale. Mais comme g dit plus tot g essayé avec le handle de la fenetre et ca marche pas non plus...
 
Voila ma fonction callback :

Code :
  1. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. int wmId, wmEvent, error, i, nbpt;
  4. PAINTSTRUCT ps;
  5. HDC hdc;
  6. static TripodeData Data;
  7. char g_FileName[100]="";
  8. static int etape=0;
  9. UINT retour=-1;
  10. switch (message)
  11. {
  12. case WM_CREATE:
  13. retour = SetTimer(hWnd, IDT_TIMER, 50, 0);
  14. break;
  15. case WM_COMMAND:
  16. wmId    = LOWORD(wParam);
  17. wmEvent = HIWORD(wParam);
  18. switch (wmId)
  19. {
  20. case IDM_EXIT:
  21.   DestroyWindow(hWnd);
  22.   break;
  23. case IDM_OPEN:
  24. //Ouverture du fichier
  25. error = GetFileName(hWnd, g_FileName);
  26. LectureDonnees(g_FileName, Data);
  27. if(error!=1)
  28. MessageBox(hWnd,"Probleme de lecture des données","Erreur",MB_ICONEXCLAMATION);
  29. else
  30. MessageBox(hWnd,"Fichier ouvert","OK",MB_ICONEXCLAMATION);
  31. //Affichage des données chargées
  32. InvalidateRect(hWnd,NULL,TRUE); UpdateWindow(hWnd);
  33. retour = SetTimer(hWnd, IDT_TIMER, 50, 0);
  34. break;
  35. case WM_TIMER:
  36. /*switch (wParam)  
  37. {  
  38. case IDT_TIMER:*/
  39. if(etape<Data.nbptPoints)
  40. etape++;
  41. else
  42. KillTimer(hWnd, IDT_TIMER);
  43. InvalidateRect(hWnd,NULL,TRUE); UpdateWindow(hWnd);
  44. /*break;   
  45. }*/
  46. break;
  47. default:
  48. return (DefWindowProc(hWnd, message, wParam, lParam));
  49. }
  50. break;
  51. case WM_PAINT:
  52. hdc = BeginPaint (hWnd, &ps);
  53. nbpt=Data.nbptPoints;
  54. if(nbpt!=0)
  55. {
  56. Ellipse(hdc,(int)(20*Data.points[etape].x + 249),(int)(20*Data.points[etape].y + 249),
  57. (int)(20*Data.points[etape].x + 251),(int)(20*Data.points[etape].y + 251));
  58.    }
  59.    EndPaint (hWnd, &ps);
  60.    break;
  61. default:
  62.   return (DefWindowProc(hWnd, message, wParam, lParam));
  63. }
  64. return (0);
  65. }

mood
Publicité
Posté le 08-05-2003 à 22:12:47  profilanswer
 

n°387620
Konar
Posté le 08-05-2003 à 22:26:39  profilanswer
 

c détail, mais t'as pas le droit de faire :
char g_FileName[100]="";
 
sinon pour ton pb de timer, t'es sur que t'y entres meme pas une seule fois ? met genre une msgbox ou autre pour voir.

n°387633
Piemur2000
Posté le 08-05-2003 à 22:30:49  profilanswer
 

Je vien d'essayer avec une message box et elle ne s'affiche pas donc ca ne rentre meme pas dans le WM_TIMER (j'avais regardé o debugger..).
 
Pkoi on a pas le droit de faire : char g_FileName[100]="";???

n°387655
VisualC++
J'va y penser ...
Posté le 08-05-2003 à 22:44:31  profilanswer
 

Euh je suis pas sur que WM_TIMER fasse partit de WM_COMMAND  :??: Faudrait verifier

n°387658
Piemur2000
Posté le 08-05-2003 à 22:45:33  profilanswer
 

Pas con ca je v essayer et je vous di

n°387660
Piemur2000
Posté le 08-05-2003 à 22:48:52  profilanswer
 

C t ca merci beaucoup. C toujours les trucs les plus bete au quel on ne pense pas. :p  
 
Encore merci, A+  :jap:

n°387662
VisualC++
J'va y penser ...
Posté le 08-05-2003 à 22:49:55  profilanswer
 

Dr (tj poster un peu plus de code ;))
 
:jap:

n°387666
Piemur2000
Posté le 08-05-2003 à 22:52:45  profilanswer
 

C clair la prochaine fois je mettrais tout mon projet  :D. G passer tout l'aprem à bloquer et en 2s tout fonctionne parfaitement c genial...  :bounce:

n°388598
stancw
Parle à Monkey ...
Posté le 09-05-2003 à 18:59:05  profilanswer
 

Au fait :  
sous windows fo pas esperer descendre ne dessous de ~30ms... sinon fo prendre RT Windows ou un truc dans le genre (un pack specialement develepper pour le temps réel(cad + deterministe) sous Windows....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Utilisation de timer sous Visual C++ avec API Win32

 

Sujets relatifs
[C++] Je cherche un tutorial bien fait pour faire une GUI en visual[dev driver win32] DO_POWER_PAGABLE DO_POWER_INRUSH
[Visual C++] "cannot add new member"ecrire et lire dans un fichier en visual basic 6 ?
ftp_size() utilisationvisual basic 3
utilisation d'un select dans le set d'un UPDATESous Visual C++ 6.0, créer un bouton Parcourir (fichier)
[C/C++] Thread en standard (no API win32) 
Plus de sujets relatifs à : [C++] Utilisation de timer sous Visual C++ avec API Win32


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR