© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 08/12/2001 -
Dernière mise à jour : 08/12/2001
Millisleep - Endormir le processus pour une durée déterminée.
Synopsis
Description
unsigned long MilliSleep (unsigned long NbMilliSec);
MilliSleep() endort le processus jusqu'à ce que NbMillSec milli-secondes se soient écoulées, ou jusqu'à ce qu'un signal non-ignoré soit reçu.
Valeur renvoyée
MilliSleep() renvoie zéro si le temps prévu s'est écoulé, ou le nombre de milli-secondes restantes si un signal a réveillé le processus.
Travail demandé : écrire la fonction Millisleep()
Utiliser un timer système ITIMER_REAL. Bloquer le processus dans un appel à la fonction système pause() jusqu'à réception de SIGALRM. Ne pas utiliser les classes CTimeval, CTimerReal, etc., mais seulement les fonctions et structures de base du système (setitimer(), struct itimerval, etc.). Penser qu'avant l'appel de MilliSleep(), l'utilisateur a pu ignorer ou dérouter SIGALRM. Il a pu aussi armer le timer ITIMER_REAL. Dans ce cas, ll faut le réarmer dans l'état dans lequel il était avant l'appel de MilliSleep(),avant de retourner de la fonction. On supposera en revanche que le signal SIGALRM n'est pas bloqué en entrant dans la fonction.
Ne pas gérer les éventuelles exceptions.
Corrigé : Millisleep.cxx
int nanosleep(const struct timespec *req, struct timespec *rem); |
le paramètre rem n'est rempli, avec le temps restant avant une expiration qui aurait été normale, que lorsque la fonction a été interrompue.
1) - Dans l'espace de nom nsSysteme, écrire la fonction Nanosleep(), avec un seul paramètre donné-résultat de type timespec. Cette fonction ne renvoie rien. Elle appelle ::nanosleep() de telle sorte que :
3) - Surcharger la fonction Nanosleep() de façon à ce qu'elle n'ait qu'un paramètre donné, et qu'elle renvoie le temps restant à dormir (attention aux règles de surcharge en C++).
4) - Ecrire un programme qui appelle cette dernière version
de Nanosleep(), et qui affiche au réveil, en plus du temps
restant à dormir, si Nanosleep() a été ou
non interrompue.
Corrigé : Nanosleep.cxx
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique