1. NOM▲
pthread_getcpuclockid - Récupérer l'identifiant d'horloge de temps CPU d'un thread
2. SYNOPSIS ▲
#include <pthread.h>
#include <time.h>
int
pthread_getcpuclockid
(
pthread_t thread, clockid_t *
clock_id);
Compilez et effectuez l'
édition des liens avec l
'
option -
pthread.
3. DESCRIPTION ▲
La fonction pthread_getcpuclockid() renvoie l'identifiant d'horloge pour l'horloge de temps CPU du thread thread.
4. VALEUR RENVOYÉE ▲
En cas de réussite, cette fonction renvoie 0 ; en cas d'erreur, elle renvoie un numéro d'erreur non nul.
5. ERREURS ▲
- ENOENT Les horloges de temps CPU par thread ne sont pas pris en charge par le système.
- ESRCH
Aucun thread avec pour identifiant thread n'a pu être trouvé.
6. VERSIONS ▲
Cette fonction est disponible dans la glibc depuis la version 2.2.
7. CONFORMITÉ ▲
POSIX.1-2001.
8. NOTES ▲
Quand thread se rapporte au thread appelant, cette fonction renvoie un identifiant qui indique la même horloge que celle manipulée par clock_gettime(2) et clock_settime(2) avec l'identifiant d'horloge CLOCK_THREAD_CPUTIME_ID.
9. EXEMPLE ▲
Le programme ci-dessous crée un thread puis utilise clock_gettime(2) pour récupérer le temps CPU total du processus et le temps CPU utilisé par chacun des deux threads. La session suivante montre un exemple d'exécution :
$ ./
a.out
Main thread sleeping
Subthread starting infinite loop
Main thread consuming some CPU time...
Process total CPU time: 1
.368
Main thread CPU time: 0
.376
Subthread CPU time: 0
.992
9.1. Source du programme ▲
/* Effectuez l'édition des liens avec l'option "-lrt" */
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
#include <errno.h>
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
#define handle_error_en(en, msg) \
do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
static
void
*
thread_start
(
void
*
arg)
{
printf
(
"
Subthread starting infinite loop
\n
"
);
for
(
;;)
continue
;
}
static
void
pclock
(
char
*
msg, clockid_t cid)
{
struct
timespec ts;
printf
(
"
%s
"
, msg);
if
(
clock_gettime
(
cid, &
ts) ==
-
1
)
handle_error
(
"
clock_gettime
"
);
printf
(
"
%4ld.%03ld
\n
"
, ts.tv_sec, ts.tv_nsec /
1000000
);
}
int
main
(
int
argc, char
*
argv[])
{
pthread_t thread;
clockid_t cid;
int
j, s;
s =
pthread_create
(&
thread, NULL
, thread_start, NULL
);
if
(
s !=
0
)
handle_error_en
(
s, "
pthread_create
"
);
printf
(
"
Main thread sleeping
\n
"
);
sleep
(
1
);
printf
(
"
Main thread consuming some CPU time...
\n
"
);
for
(
j =
0
; j <
2000000
; j++
)
getppid
(
);
pclock
(
"
Process total CPU time:
"
, CLOCK_PROCESS_CPUTIME_ID);
s =
pthread_getcpuclockid
(
pthread_self
(
), &
cid);
if
(
s !=
0
)
handle_error_en
(
s, "
pthread_getcpuclockid
"
);
pclock
(
"
Main thread CPU time:
"
, cid);
/* The preceding 4 lines of code could have been replaced by:
pclock("Main thread CPU time: ", CLOCK_THREAD_CPUTIME_ID); */
s =
pthread_getcpuclockid
(
thread, &
cid);
if
(
s !=
0
)
handle_error_en
(
s, "
pthread_getcpuclockid
"
);
pclock
(
"
Subthread CPU time: 1
"
, cid);
exit
(
EXIT_SUCCESS); /* Terminates both threads */
}
10. VOIR AUSSI ▲
clock_gettime(2), clock_settime(2), timer_create(2), clock_getcpuclockid(3), pthread_self(3), pthreads(7), time(7)
11. COLOPHON ▲
Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.
12. TRADUCTION ▲
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».