Bonjour,
j'ai un traitement a faire chaque X secondes .....comment ecrire ma boucle while en c++ afin de supporter ce critere?
while( ... )
{
// mon traitement ;
}
merci
Version imprimable
Bonjour,
j'ai un traitement a faire chaque X secondes .....comment ecrire ma boucle while en c++ afin de supporter ce critere?
while( ... )
{
// mon traitement ;
}
merci
Pourquoi ne crées-tu pas un timer ?
comment le faire ? :( sachant que je dois passer la duree en prametre :(
Montre moi comment creer un timer pour que je puisse l'alimenter avec une valeur X donnée :( et merci
Utilise SetTimer, et tu as aussi le droit de faire une recherche sur le forum, le sujet a été maintes fois traité
Ca dépends:
1/ Sur quel type de projet travailles-tu? (dialog based, SDI, MDI, console...)
2/ Quelle est la précision dont tu as besoin?
C'est un executable Win32 consiole simple que ej susi entrain de faire ...tout ce qu eje veux faire c'est que ce timer controle le traitement toutes les X secondes ...je ne veux pas utiliser Sleep !! voilà
Et bien dans ce cas, je n'ai rien à rajouter àCitation:
Envoyé par nico-pyright(c)
C'est quoi que tu veux ontrôler parce qu'on parle de timer mais c'est pas dis que se soit la solution( pour info pour créer un timer sous Windows fais une recherche sur la fonction CreateTimer)
c'est a dire? pas de solution!!!
qu'est-ce qui pose problème ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { OutputDebugString("1 seconde\n"); // appelé toutes les secondes } int main(int argc, char* argv[]) { SetTimer(NULL, 1, 1000, TimerProc); MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
Merci pour cet effort....j'apprécie..mais y aurait il moyen plus simple de prendre un intervalle de temps dans une boucle while qui fait un certain traitement !!!!
le raisonnement est simple : tant que X secondes sont ecoulés alors on fait le traitement...et ainsi de suite ....
Sleep ou Wait. :?:
ou alors un calcul avec différence de temps, mais le problème, c'est que ca va utiliser 100% du CPU
et c'est dommage.
Les timers sont fait pour ca
bon....et comment donc l'injecter dans uen boucle while!! est ce possible ou pas !! voilà ma question...
Sinon pour l'exemple du timer deja proposé... comment encapsuler mon traitement pour que ca soit fait selon les intervalles propre au timer !!
merci
il y en a une de boucle while dans l'exemple.
Que veux-tu faire exactement ?
Dans mon exemple, j'affiche une phrase toutes les secondes. (Ok, je gère pas la fin et la sortie de boucle, mais c'est faisable ...)
Je vise une application consile Win 32 en c++ prenant de la ligne de commande les argumenst qu'il faut .si je prend ton exemple comment tu fait si jamais ke et passe comme arguments :
5000 Test
ou 5000 est la periode d'affichage
Test : la phrase a afficher !
ca m'aidera :)
merci
la franchement, j'ai rien compris.Citation:
Envoyé par jlassira
Tu veux que je t'explique comment on récupère la ligne de commande ?
Si tu veux une période de 5000 ms, il suffit de changer cette valeur dans SetTimer. Afficher dans la console ? avec printf ou cout par exemple
NB : n'oublie pas qu'il faudra gerer une condition de sortie en détruisant le timer (avec KillTimer)
ma question de depart etait pourtant simple :
j'ai un traitement a faire chaque X secondes .....comment ecrire ma boucle while en c++ afin de supporter ce critere?
while( ... )
{
// mon traitement ;
}
donc mon soucis ce n'est pas la lecture des parametres !! mais comment faire un traitement cyclique toutes les x secondes avec une boucle while? est ce possible ou pas tout d'abord sinon comment adapter mon bloc traitement afin qu'il s'exeute chaque X secondes !! ( exp: affichage d'un message sur l'ecran, lecture d'un fichier et copie dans un autre ...envoie d'un mail...)
et encore merci :)
tu as toutes les cartes en main, les messages précédents t'expliquent comment faire...
Pour résumé, tu as deux solutions :
- soit tu gardes ta fameuse boucle while en y incorporant un ::Sleep() pour faire une pause à l'intérieur,
- soit tu implémentes un timer Win32 avec ::CreateTimer() et ::KillTimer() et dans la fonction de callback du timer tu mets le corps de ta boucle while() qui n'aura bien sûr plus lieu d'être.
Y'a rien de sorcier, ou alors précise ton problème.
:D
Peut on m'expliquer ce bout de code etape par etape !! et l'utilisation des fonctions Translate et Dispatch dedans!! en gros que fais ce code ! :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { OutputDebugString("1 seconde\n"); // appelé toutes les secondes } int main(int argc, char* argv[]) { SetTimer(NULL, 1, 1000, TimerProc); MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
merci :)
SetTimer permet de créer un timer, la fonction TimerProc sera appellée toutes les 1000 ms (dans l'exemple)Citation:
Envoyé par jlassira
La boucle GetMessage/TranslateMessage/DispatchMessage permet d'intercepter le message WM_TIMER que windows va envoyer toutes les secondes à l'application (grace à la création du timer). A chaque interception, elle appelle la fonction TimerProc.
L'interet de GetMessage est qu'il s'arrette tant qu'il n'y a pas de messages, donc ca ne consomme pas de CPU
bon...merci pour l'explication!!
supposons que dans ce cout de code je veux par exemple ajouter le traitement suivant:
printf" ceci est un test de timer pour ma ligne de commande \n" );
a quel niveau il faudra l'injecter ?
( bien sur ca sera la meme chose pour tout autre traitement different d'un simpel affichage sur la console)
thanks :)
au fait j'ai oublié...quels bibliotheques a ajouter pour que ca fonctionne :)!!
Enfin, là bon, je comprends rien.
Tu veux afficher "ceci est un test de timer pour ma ligne de commande" toutes les X secondes ?
et bien tu le mets dans la fonction TimerProc.
C'est que tu n'as rien compris à l'explication alors. (j'explique si mal que ca ? 8O )
regarde peut-etre alors dans le tuto de bob, il est peut-etre plus pédagogue :D http://bob.developpez.com/tutapiwin/article_29.php
Mais si au contraire !! merci pour l'effort et ta disponibilite :)
mais j'ai un petit soucis la :)..oublions pour un moment ce que ej veux faire moi ....si je prends ce code deja posté je constate que pleins d'erreurs sont affichés lors de la compilation .... a part el VOIS qui devrait etre un void :) tout le reste est inconnu par mon compilateur sachant que j'utilise VC++.Net!! pourrais tu intervenir pleaaaaaaaaaase :)
inclus <windows.h> en premier lieu
et ensuite, copie les messages d'erreurs que tu obtiens.
(quel est cette histoire de VOIS ?)
non je voulais dire le VOID :) en miniscule c tout :)..je vais proceder au test ..
je confirme bien que la signature de la callback TimerProc doit etre void, comme dit dans msdn http://msdn.microsoft.com/library/de.../timerproc.asp
Code:
1
2
3
4
5 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(48): warning C4935: spécificateur d'accès à l'assembly modifié à partir de 'public' c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(93): error C2872: 'IServiceProvider' : symbole ambigu c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\ServProv.h(100): fatal error C1903: impossible de récupérer à partir des erreurs précédentes ; arrêt de la compilation
voiçi les erreurs que j'ai obtenu mem apres avoir ajouré windows.h