precision de Sleep [Visual C++] - Programmation
Marsh Posté le 02-07-2001 à 16:08:08
SoWhatIn22 a écrit a écrit : hello, je suis intrigué: 1./ for(int i=0; i<5000; ++i) { Sleep(1); } vs 2./ for(int i=0; i<50; ++i) { Sleep(100); } pour 2./, je sors de la boucle eviron 5s apres y être entré-OK pour 1./, la boucle dure plutot 30s que 5s... Si qq1 a une explicatrion crédible, je suis preneur )) |
Bof... ca fait quoi un petit facteur 1000...
c'est microsoft...
Marsh Posté le 02-07-2001 à 16:20:30
C'est peut-être approximatif le résultat de Sleep(durée).. C'est au moins ce qu'on attend, voire plus..
Cela serait interessant de savoir à partir de quelle valeur il y a "divergence". Jusqu'à 65 milliseconde, c'est-y bon ?
Vu qu'il y a un tick d'horloge tout les 65 ms, peut-être que le "raccordement" est vaseux (si je puis me permettre)...
Ou le compilateur qui fait des siennes en optimisant de travers.
C'est reproductible ? (Si une appli en tâche de fond monopolyse le temps CPU, il y a du retard).
Marsh Posté le 02-07-2001 à 17:04:07
CARBON_14 a écrit a écrit : C'est peut-être approximatif le résultat de Sleep(durée).. C'est au moins ce qu'on attend, voire plus.. Cela serait interessant de savoir à partir de quelle valeur il y a "divergence". Jusqu'à 65 milliseconde, c'est-y bon ? Vu qu'il y a un tick d'horloge tout les 65 ms, peut-être que le "raccordement" est vaseux (si je puis me permettre)... Ou le compilateur qui fait des siennes en optimisant de travers. C'est reproductible ? (Si une appli en tâche de fond monopolyse le temps CPU, il y a du retard). |
Voir plus ? voire moins tu veux dire ?
sleep() l'argument est donne en secondes normalement...
Marsh Posté le 02-07-2001 à 17:20:26
>sleep() l'argument est donne en secondes normalement
euh, non. dans le MSDN:
-----------------
The Sleep function suspends the execution of the current thread for a specified interval.
VOID Sleep(
DWORD dwMilliseconds // sleep time in milliseconds
);
-----------------
>C'est reproductible ?
sans pb. Je lance un thread qui ne fais que ca. Et il n'y a pas d'autre appli gourmande. Et la charge CPU est à zéro...
Marsh Posté le 02-07-2001 à 17:37:33
bon, a priori, ca doit être du au scheduling de NT. Sachant que le scheduler doit allouer a peu pres 20ms à chaque thread, celui-ci fait a peu pres 20 iterations. Mais quand le scheduler rend actif un autre thread, le Sleep(1) n'est pas executé.
donc voila.
Je vais donc faire autrement!
merci et a+
Marsh Posté le 02-07-2001 à 19:06:10
Sleep, pour ne pas encombrer le processeur inutilement dit au scheduleur qu'il peut passer à un autre et ne pas revenir sur le thread appelant avant que sleep est écoulé. Donc sleep a une précision qui dépend du nombre de threads de même priorité lancés.
Marsh Posté le 03-07-2001 à 09:56:02
SoWhatIn22 a écrit a écrit : >sleep() l'argument est donne en secondes normalement euh, non. dans le MSDN: ----------------- The Sleep function suspends the execution of the current thread for a specified interval. VOID Sleep( DWORD dwMilliseconds // sleep time in milliseconds ); ----------------- >C'est reproductible ? sans pb. Je lance un thread qui ne fais que ca. Et il n'y a pas d'autre appli gourmande. Et la charge CPU est à zéro... |
Pardon j'ai confondu Sleep et sleep...
Citation : unsigned int sleep(unsigned int seconds); |
Marsh Posté le 02-07-2001 à 10:50:53
hello,
je suis intrigué:
1./
for(int i=0; i<5000; ++i)
{
Sleep(1);
}
vs
2./
for(int i=0; i<50; ++i)
{
Sleep(100);
}
pour 2./, je sors de la boucle eviron 5s apres y être entré-OK
pour 1./, la boucle dure plutot 30s que 5s...
Si qq1 a une explicatrion crédible, je suis preneur ))