delai d'attente - C++ - Programmation
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
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;
}
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 !!!!!!!!
Marsh Posté le 19-07-2002 à 13:09:33
Jar Jar a écrit a écrit : GRUIIIIIIIIIIIIIIIIIIIIIIKKKKKKKK !!!!!!!! |
y'a un sanglier sur ce topic?
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.
Marsh Posté le 19-07-2002 à 13:27:53
Il est sous linux !
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
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...
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.
Marsh Posté le 16-08-2007 à 13:32:47
juste comme ça, c'est quoi ton histoire de précision 1ms ?
Marsh Posté le 16-08-2007 à 16:00:59
Oups desolé. J'avais pas vu que le topic etait si vieux . . .
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...