Provided by: manpages-ru-dev_4.18.1-1_all bug

ИМЯ

       pthread_getcpuclockid - возвращает ID таймера времени ЦП у нити

LIBRARY

       POSIX threads library (libpthread, -lpthread)

СИНТАКСИС

       #include <pthread.h>
       #include <time.h>

       int pthread_getcpuclockid(pthread_t thread, clockid_t *clockid);

ОПИСАНИЕ

       The  pthread_getcpuclockid()   function obtains the ID of the CPU-time clock of the thread
       whose ID is given in thread, and returns it in the location pointed to by clockid.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении функция возвращает 0;  при  ошибке  возвращается  ненулевой  номер
       ошибки.

ОШИБКИ

       ENOENT В системе не поддерживаются выделенные таймеры времени ЦП для каждой нити.

       ESRCH  Нить с идентификатором thread не найдена.

ВЕРСИИ

       This function is available since glibc 2.2.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │pthread_getcpuclockid()                                │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

       Если  thread указывает на вызвавшую нить, то функция возвращает идентификатор, указывающий
       на  таймер,  управляемый  clock_gettime(2)  и  clock_settime(2),  если  ID  таймера  равно
       CLOCK_THREAD_CPUTIME_ID.

ПРИМЕРЫ

       Программа,  показанная  далее,  создаёт нить и используя clock_gettime(2) показывает общее
       время ЦП и время ЦП, затраченное на работу нитей по отдельности. Пример сеанса работы:

           $ ./a.out
           Главная нить спит
           Вторая нить входит в бесконечный цикл
           Главная нить использует немного времени ЦП…
           Общее время ЦП для процесса:    1.368
           Время ЦП для главной нити:      0.376
           Время ЦП для второй нити:       0.992

   Исходный код программы

       /* компоновка с "-lrt" */

       #include <errno.h>
       #include <pthread.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <time.h>
       #include <unistd.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("Вторая нить входит в бесконечный цикл\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("%4jd.%03ld\n", (intmax_t) ts.tv_sec, ts.tv_nsec / 1000000);
       }

       int
       main(void)
       {
           pthread_t thread;
           clockid_t cid;
           int s;

           s = pthread_create(&thread, NULL, thread_start, NULL);
           if (s != 0)
               handle_error_en(s, "pthread_create");

           printf("Главная нить спит\n");
           sleep(1);

           printf("Main thread consuming some CPU time...\n");
           for (unsigned int j = 0; j < 2000000; j++)
               getppid();

           pclock("Общее время ЦП для процесса: ", CLOCK_PROCESS_CPUTIME_ID);

           s = pthread_getcpuclockid(pthread_self(), &cid);
           if (s != 0)
               handle_error_en(s, "pthread_getcpuclockid");
           pclock("Время ЦП для главной нити:   ", cid);

           /* предыдущие 4 строки можно заменить на:
              pclock("Время ЦП для главной нити:", CLOCK_THREAD_CPUTIME_ID); */

           s = pthread_getcpuclockid(thread, &cid);
           if (s != 0)
               handle_error_en(s, "pthread_getcpuclockid");
           pclock("Время ЦП для второй нити:     ", cid);

           exit(EXIT_SUCCESS);         /* завершаем обе нити */
       }

СМ. ТАКЖЕ

       clock_gettime(2),     clock_settime(2),      timer_create(2),      clock_getcpuclockid(3),
       pthread_self(3), pthreads(7), time(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства   был  сделан  Alexey,  Azamat  Hackimov
       <azamat.hackimov@gmail.com>,  kogamatranslator49  <r.podarov@yandex.ru>,  Kogan,  Max   Is
       <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.