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.
|