Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Temporiser une boucle

13 réponses
Avatar
Ragnartichaud
En C++, je cherche à trouver le moyen de placer un condition sur le temps
d'éxécution d'une boucle : par exemple
si (temps d'execution < 50 ms ) { wait } else { continue }
je v m'en servir pour un programme qui va afficher une série d'images et je
vois pas trop comment faire pour "brider" le programme .

merci

10 réponses

1 2
Avatar
Cyrille Szymanski
On 2004-03-31, Ragnartichaud wrote:
En C++, je cherche à trouver le moyen de placer un condition sur le temps
d'éxécution d'une boucle : par exemple
si (temps d'execution < 50 ms ) { wait } else { continue }
je v m'en servir pour un programme qui va afficher une série d'images et je
vois pas trop comment faire pour "brider" le programme .



GetSystemTime est ton amie

--
cns
Avatar
patrox
Sleep( 50 )

ce n'est pas tres precis cela dit.

pat.

"Cyrille Szymanski" a écrit dans le message de
news:406c9d72$0$15494$
On 2004-03-31, Ragnartichaud wrote:
> En C++, je cherche à trouver le moyen de placer un condition sur le


temps
> d'éxécution d'une boucle : par exemple
> si (temps d'execution < 50 ms ) { wait } else { continue }
> je v m'en servir pour un programme qui va afficher une série d'images et


je
> vois pas trop comment faire pour "brider" le programme .
>
GetSystemTime est ton amie

--
cns


Avatar
Manu et Isa
Les Timer sont aussi tres pratiques.

Manu

"patrox" a écrit dans le message de
news:4072f312$0$288$
Sleep( 50 )

ce n'est pas tres precis cela dit.

pat.

"Cyrille Szymanski" a écrit dans le message de
news:406c9d72$0$15494$
> On 2004-03-31, Ragnartichaud wrote:
> > En C++, je cherche à trouver le moyen de placer un condition sur le
temps
> > d'éxécution d'une boucle : par exemple
> > si (temps d'execution < 50 ms ) { wait } else { continue }
> > je v m'en servir pour un programme qui va afficher une série d'images


et
je
> > vois pas trop comment faire pour "brider" le programme .
> >
> GetSystemTime est ton amie
>
> --
> cns




Avatar
siwu
Ragnartichaud wrote:
En C++, je cherche à trouver le moyen de placer un condition sur le temps
d'éxécution d'une boucle : par exemple
si (temps d'execution < 50 ms ) { wait } else { continue }
je v m'en servir pour un programme qui va afficher une série d'images et je
vois pas trop comment faire pour "brider" le programme .

merci






int ticks1;
int ticks2;

for (i = 0; i < n; i++)
{
ticks1 = GetTickCount();

// afficher l'image, faire des trucs

ticks2 = GetTickCount();
if ((ticks2 - ticks1) > 50)
Sleep(50 - (ticks2 - ticks1));
}

ce code synchronise ta boucle a 50ms par iteration (si moins de 50ms).
Ca bride par le bas dirons-nous :)

siwu
Avatar
Manuel Leclerc
siwu a écrit :

int ticks1;
int ticks2;

for (i = 0; i < n; i++)
{
ticks1 = GetTickCount();

// afficher l'image, faire des trucs

ticks2 = GetTickCount();
if ((ticks2 - ticks1) > 50)
Sleep(50 - (ticks2 - ticks1));
}

ce code synchronise ta boucle a 50ms par iteration
(si moins de 50ms). Ca bride par le bas dirons-nous :)



1) Peut être bien qu'il faut remplacer > par <, sinon
on risque de faire un Sleep de quelques semaines, non ?

2) Peut être bien aussi qu'il faut se méfier du moment où
les ticks passent de 0xffffffff à 0, non ?
Avatar
halfwolf
"Manuel Leclerc" wrote in message news:<c6boj8$hfa$...
siwu a écrit :

> int ticks1;
> int ticks2;
>
> for (i = 0; i < n; i++)
> {
> ticks1 = GetTickCount();
>
> // afficher l'image, faire des trucs
>
> ticks2 = GetTickCount();
> if ((ticks2 - ticks1) > 50)
> Sleep(50 - (ticks2 - ticks1));
> }
>
> ce code synchronise ta boucle a 50ms par iteration
>(si moins de 50ms). Ca bride par le bas dirons-nous :)

1) Peut être bien qu'il faut remplacer > par <, sinon
on risque de faire un Sleep de quelques semaines, non ?



Oui, fort probable.

2) Peut être bien aussi qu'il faut se méfier du moment où
les ticks passent de 0xffffffff à 0, non ?



Non, si on travaille en non signé (en signé on aura des surprises).
Par exemple 0x32 - 0xFFFFFFFF fait 0x33 sur un DWORD, qui est bien le
résultat qu'on attendait.

DWORD ticks1;
DWORD ticks2;

for (i = 0; i < n; i++)
{
ticks1 = GetTickCount();

// afficher l'image, faire des trucs

ticks2 = GetTickCount();
if ((ticks2 - ticks1) < 50)
{
Sleep(50 - (ticks2 - ticks1));
}
}

HalfWolf
Avatar
Manuel Leclerc
HalfWolf a écrit :

Non, si on travaille en non signé (en signé on aura
des surprises).Par exemple 0x32 - 0xFFFFFFFF fait
0x33 sur un DWORD, qui est bien le résultat qu'on
attendait.



Cool, j'aurais encore appris quelque chose aujourd'hui.

--
<Mooby> bon je vousprevien
<Mooby> j'ai du repnrdre monacien clavier
<Mooby> l'auter est naze
Avatar
Aurélien REGAT-BARREL
> > 2) Peut être bien aussi qu'il faut se méfier du moment où
> les ticks passent de 0xffffffff à 0, non ?



Tiens, c'est marrant, en cherchant combien de temps il faut pour que cela se
produise (GetTickCount renvoie (en gros) le nombre de millisecondes depuis
lesquel Windows fonctionne), voilà ce que ça donne :
0xFFFFFFFF / 1000 => 4 294 967,295 secondes
/ 3600 => 1193 heures
/ 24 => 49,7

Cela ne fait-il pas le nombre de jours max durant lequel Win9x peut
fonctionner sans planter ?


--
Aurélien REGAT-BARREL
Avatar
Manuel Leclerc
Aurélien REGAT-BARREL a écrit :


[GetTickCount 49,7 jour]

Cela ne fait-il pas le nombre de jours max
durant lequel Win9x peut fonctionner sans planter ?



Si, et le plantage est lié à cette API, je crois.


--
But if that doesn't work for you, I would not consider it a great loss
for the world if your products were not produced. They contribute
something to the world if they are free software, but otherwise not.
-- Richard Stallman
Avatar
AMcD®
Manuel Leclerc wrote:

Si, et le plantage est lié à cette API, je crois.



'Lut. C'est pas une API c'est une fonction. Une API c'est un ensemble de
fonctions, de structures, d'interfaces, etc. Je sais bien que la mode est à
la vulgarisation et au crétinisme (trojan pour Cheval de Troie, programme
malicieux pour malware...), mais bon, ça coûte pas plus cher d'être un peu
précis.

--
AMcD®

http://arnold.mcdonald.free.fr/
1 2