Bonjour et merci d'avance pour votre aide.
Je veux faire une pause de l'ordre de la milliseconde. Cependant, le niveau de précision atteind n'est pas bon dès que usleep est inférieur à 100000. Ne peut on pas faire un usleep(100); ?
Precision correct :
Quand je place boucle=50 et pause=100000, alors j'obtiens bien 5 secondes de pause pour usleep et idem pour nanosleep
Précision incorrect :
Quand je place boucle=500 et pause=10000, alors j'obtiens 10 secondes de pause pour usleep et 9 secondes pour nanosleep
Quand je place boucle=5000 et pause=1000, alors j'obtiens 28 secondes de pause pour usleep et 20 secondes pour nanosleep
Voici mon code de test :
Christophe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 time_t t0; struct tm * t0_structure; unsigned long i; unsigned long pause,boucle; struct timespec req; boucle=500; pause=10000; req.tv_sec=0; req.tv_nsec=1*1000*pause; t0=time(0); for (i=0;i<boucle;i++) usleep(1*pause); t0=time(0)-t0; t0_structure=gmtime(&t0); printf("\nTemps d'execution usleep : %d:%d:%d\n",t0_structure->tm_hour,t0_structure->tm_min,t0_structure->tm_sec); t0=time(0); for (i=0;i<boucle;i++) nanosleep(&req,NULL); t0=time(0)-t0; t0_structure=gmtime(&t0); printf("\nTemps d'execution nanosleep : %d:%d:%d\n",t0_structure->tm_hour,t0_structure->tm_min,t0_structure->tm_sec);
Partager