Bonjour,
pour une appli en C/C++, j'aurais besoin qu'un thread se mette en pause pour une durée courte (1,2,5 ou 10ms) de facon fiable. Mon but étant de faire un simulateur, cette précision est importante.
En faisant des tests avec des fonctions qui regarde l'heure :
Je vois qu'un sleep(1) dure environs 1.8 ms (l'appel de la fonction current_time est négligeable, de l'ordre de la centime de millisecondes)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
un Sleep(2) dure 2.8ms également en moyenne (avec des rares pointes à 17-33ms).
J'ai lu de nombreuses fois sur le net que les sleep courts sont imprécis (et je l'ai bien constaté) puisqu'ils bloquent le thread pour une durée minimale.
Pour contourner ce problème, j'ai essayé un truc du genre :
J'arrive à obtenir des temps d'attentes tout à fait raisonnables (1.00ms) et assez stable, mais j'ai également des pointes ponctuelles au dela des 10-20ms d'attentes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
Le fait de changer de priorité le thread n'a en fait que peu d'influence, surtout que le but n'est pas de bloquer le reste de la machine sur laquelle tourne une application serveur video et une socket de réception sur un thread parallèle.
J'ai meme essayé de combiner un Sleep(1) puis while (1000*current_time() < (start+time)) (pour une attente de 2ms par exemple..) Là encore je suis la plupart du temps stable, mais avec les mêmes pointes.
Y a-t-il une solution pour éviter d'avoir des pointes d'attentes si élevée ou moins fréquement?
Le fait d'avoir 3 choses qui tournent en même temps sur le pc (Win XPau passage) est surement une des clés du problèmes, mais pas de la solution.
Passer sur un ensemble complètement linéaire (serveur+socket+appli en un seul thread) résoudrait-il le problème?(ou alors de toute facon, le fait d'avoir windows et n'importe quoi derrière ca plante tout..?)

 

 
		
		 
        

 
			
			
 
   


 Avoir un Sleep() précis pour courte durée?
 Avoir un Sleep() précis pour courte durée?
				 Répondre avec citation
  Répondre avec citation

 
  
  
 
 
			 
   
 
 
				 Envoyé par Arateris
 Envoyé par Arateris
					
				 A méditer: La solution la plus simple est toujours la moins compliquée
A méditer: La solution la plus simple est toujours la moins compliquée


 
 
 
			
 ).
 ).
Partager