#include <threads.h>
int thrd_sleep( const struct timespec* duration, struct timespec* remaining );
Cette fonction bloque le thread courant pendant un certain temps. La durée de pause se spécifie via une instance de type
struct timespec
.
Mais le thread peut reprendre avant la fin du délai s'il recçoit un signal non ignoré. Dans ce cas, le temps restant, par rapport au temps de blocage
initialement spécifié, sera stocké dans la zone de mémoire pointée par le second paramètre.
struct timespec
qui contient la durée de blocage souhaitée.
Cette durée s'exprime en secondes et en nano-secondes.
struct timespec
. Si le thread suspendu reprend plus rapidement que prévu
(sous réception d'un signal de reprise) et que ce pointeur est différent de NULL
alors la zone de mémoire pointée recevra le reste de
temps ou ne thread de sera plus bloqué.
La fonction thrd_sleep
renvoie la valeur thrd_success
si l'attente du thread se passe correctement.
Dans le cas contraire, elle renverra thrd_error
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <stdio.h> #include <stdlib.h> #include <threads.h> int main() { // On fait une première étape printf( "First step\n" ); // On attend 1 seconde thrd_sleep( &(struct timespec){.tv_sec=1}, NULL ); // On fait une seconde étape printf( "Second step\n" ); // On attend 500 milli-secondes (500 000 000 nano-secondes) thrd_sleep( &(struct timespec){.tv_nsec=500000000}, NULL ); // On fait une dernière étape printf( "Last step\n" ); return EXIT_SUCCESS; } |
Pour compiler cet exemple sous environnement Linux/Unix, il est nécessaire de lier la librairie pthread (Posix Thread) à votre exécutable. Voici un exemple de compilation.
$> gcc -o sample sample.c -lpthread $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :