ClockId(), ClockId_r()

Получить идентификатор часов для заданного процесса и потока

Прототип:

#include <sys/neutrino.h>
#include <inttypes.h>
extern int ClockId( pid_t pid,
int tid );
extern int ClockId_r( pid_t pid,
int tid );

Аргументы:

pid
Идентификатор процесса, для которого необходимо получить идентификатор (тип) часов (clock ID). Если этот параметр равен 0, то clock ID будет получен для вызывающего процесса.
tid
Идентификатор потока, для которого необходимо получить идентификатор часов. Если этот параметр равен 0, то clock ID будет получен для процесса в целом.

Библиотека:

libc

Описание:

Системные вызовы ClockId() и ClockId_r() возвращают целое число, которое далее можно передать как параметр clockid_t функции ClockTime(). У часов могут быть следующие типы:

CLOCK_REALTIME
стандартные часы, определенные в POSIX. Основанные на этих часах таймеры, разбудят процессор, если он находится в режиме энергосбережения.
CLOCK_SOFTTIME
эти часы активны, когда процессор не находится в режиме энергосбережения. Например, приложение, использующее таймер на базе CLOCK_SOFTTIME для сна, не "разбудит" процессор, когда приложение должно проснуться. Это позволит процессору перейти в режим энергосбережения. Когда процессор не находится в режиме энергосбережения таймеры типа CLOCK_SOFTTIME аналогичны типу CLOCK_REALTIME.
CLOCK_MONOTONIC
эти часы всегда увеличиваются с постоянной скоростью и не могут быть отрегулированы.

Когда clock ID передается в функцию ClockTime(), то она возвращает в параметре old количество наносекунд, в течение которых выполнялся указанный поток указанного процесса.

Функции ClockId() и ClockId_r() идентичны, но по разному указывают на ошибки.


Note: Вместо использования системных вызовов рекомендуется применять функции clock_getcpuclockid() или pthread_getcpuclockid().

Состояния блокировки:

Эти вызовы являются неблокируемыми.

Возвращаемое значение:

ClockId()
Целое число, которое может быть передано в функцию ClockTime(). При возникновении ошибки функция вернет -1 и установит переменную errno.
ClockId_r()
Целое число, которое может быть передано в функцию ClockTime(). Данная функция не устанавливает переменную errno. При возникновении ошибки возвращает отрицательное значение из раздела «Коды ошибок».

Коды ошибок:

ESRCH
Идентификатор процесса pid или идентификатор потока tid не существуют.

Примеры:

Программа определяет загрузку системы:

id = ClockId( 1, 1 );
for( ;; )
{
ClockTime( id, NULL, &start );
sleep( 1 );
ClockTime( id, NULL, &stop );
printf( "load = %f%%\n", (1000000000.0 - (stop - start)) / 10000000.0 );
}

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

ClockTime(), clock_getcpuclockid(), pthread_getcpuclockid()




Предыдущий раздел: Описание API системной библиотеки