delai d'attente

delai d'attente - C++ - Programmation

Marsh Posté le 19-07-2002 à 08:54:29    

Bonjour, je voudrais savoir pourquoi quand j'utilise les fonctions  
- select  
- pselect  
- nanosleep  
- setitimer  
je n'arrive pas à obtenir la précision souhaitée.  
 
Par exemple, si je souhaite une précision de 1ms, j'obtiens qqch proche de 10ms quelque soit la fonction. En fait, ça ne
fonctionne pas dès que la précision est <10ms  
 
Si qq'un a une idée...

Reply

Marsh Posté le 19-07-2002 à 08:54:29   

Reply

Marsh Posté le 19-07-2002 à 09:11:39    

Citation :

Dans un programme en C, de la même façon, on peut avoir besoin d'attendre un certain temps. Une idée naturelle est d'additionner le temps d'attente voulu à la valeur courante de l'horloge, puis de boucler jusqu'à ce que l'horloge atteigne cette nouvelle valeur. Cette technique, qui porte le nom de ``busy wait'', possède un défaut rédhibitoire dans certains cas : elle consomme ``à fond'' du temps CPU essentiellement pour ne rien faire. Les autres tâches risquent d'en pâtir, car cela réduit le temps CPU que leur alloue l'ordonnanceur. Il est donc plus sympathique de ``laisser la main'', c'est à dire mettre en sommeil le processus. La fonction pertinente est encore sleep, dont le prototype est définit dans unistd.h. Mais la précision de sleep n'est que de l'ordre de la seconde. Pour une meilleure précision, on utilisera nanosleep définie dans time.h. Néanmoins, le nom de cette fonction ne doit pas faire illusion : loin d'être de l'ordre de la nanoseconde, la précision est plutôt de l'ordre du centième de seconde, du moins sur les PCs, et dans la version actuelle de Linux (cf. man nanosleep). Il faut également savoir que certains signaux peuvent ``réveiller'' le processus avant la fin de la période d'attente. Si tel est le cas, nanosleep renvoie par l'intermédiaire d'un de ses arguments, le temps d'attente qui reste à effectuer. Pour pouvoir attendre une fraction de milliseconde, une solution est d'utiliser l'interruption rtc, comme nous le verrons dans la section suivante.


extrait de http://www.ehess.fr/centres/lscp/p [...] iming.html
 
 
 

Reply

Marsh Posté le 19-07-2002 à 11:01:55    

Merci prettysmile  
 
C'était intéressant comme réponse mais finalement j'ai trouvé
J'utilise la fonction gettimeofday
 
Plutôt que d'appeler ces fonction pselect, nano..., je fais  
 
fin= FALSE;  
gettimeofday(date_debut);  
date_fin=date_debut+100(µs);  
while(fin!=TRUE){  
     .......  
     gettimeofday(date_courante);  
     if(date_courante>=date_fin) fin=TRUE;  
}

Reply

Marsh Posté le 19-07-2002 à 12:29:38    

Gaspard a écrit a écrit :

fin= FALSE;  
gettimeofday(date_debut);  
date_fin=date_debut+100(µs);  
while(fin!=TRUE){  
     .......  
     gettimeofday(date_courante);  
     if(date_courante>=date_fin) fin=TRUE;  
}


GRUIIIIIIIIIIIIIIIIIIIIIIKKKKKKKK !!!!!!!!


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 19-07-2002 à 13:09:33    

Jar Jar a écrit a écrit :

GRUIIIIIIIIIIIIIIIIIIIIIIKKKKKKKK !!!!!!!!



y'a un sanglier sur ce topic?

Reply

Marsh Posté le 19-07-2002 à 13:17:22    

Gaspard a écrit a écrit :

Bonjour, je voudrais savoir pourquoi quand j'utilise les fonctions  
- select  
- pselect  
- nanosleep  
- setitimer  
je n'arrive pas à obtenir la précision souhaitée.  
 
Par exemple, si je souhaite une précision de 1ms, j'obtiens qqch proche de 10ms quelque soit la fonction. En fait, ça ne
fonctionne pas dès que la précision est <10ms  
 
Si qq'un a une idée...  




 
Tu ne tiens pas compte du multitache : Sous win2k, l'OS donne la main à chaque programme toutes les 10 ms donc tu ne pourras avoir mieux.

Reply

Marsh Posté le 19-07-2002 à 13:27:53    

Il est sous linux !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2002 à 13:35:12    

Mara's dad a écrit a écrit :

Il est sous linux !




 
c'est marqué nulle part  :sarcastic:

Reply

Marsh Posté le 19-07-2002 à 14:51:40    

Heu désolé, c'était marqué dans un autre topic de gaspard qui s'intitulait pareil, mais avec le [C, C++] en moins !
C'est la première question que je lui posais avant qu'il ouvre un autre topic pour la même question...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-08-2007 à 12:08:03    

Pareil, le scheduler de linux donne la main toutes les 10ms, c'est fichu si tu veux faire moins.

Reply

Marsh Posté le 16-08-2007 à 12:08:03   

Reply

Marsh Posté le 16-08-2007 à 13:32:47    

juste comme ça, c'est quoi ton histoire de précision 1ms ?

Reply

Marsh Posté le 16-08-2007 à 15:23:28    

un up de 5 ans, pas mal.

Reply

Marsh Posté le 16-08-2007 à 16:00:59    

Oups desolé. J'avais pas vu que le topic etait si vieux . . .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed