Читаем Linux API. Исчерпывающее руководство полностью

CLOCK_REALTIME — Общесистемные часы реального времени, доступные для изменения

CLOCK_MONOTONIC — Монотонные часы, доступные только для чтения

CLOCK_PROCESS_CPUTIME_ID — Часы процессорного времени на уровне отдельного процесса (начиная с Linux 2.6.12)

CLOCK_THREAD_CPUTIME_ID — Часы процессорного времени на уровне отдельного потока (начиная с Linux 2.6.12)


Константа CLOCK_REALTIME представляет общесистемные часы, которые измеряют обычное время. В отличие от CLOCK_MONOTONIC их можно изменять.

В стандарте SUSv3 сказано, что часы CLOCK_MONOTONIC измеряют время, начиная с какого-то «неопределенного момента в прошлом», который не меняется после запуска системы. Эти часы могут пригодиться в приложениях, на которые не должны влиять искусственные изменения системных часов (например, когда пользователь редактирует системное время). В Linux этот вид часов измеряет время, прошедшее с момента запуска системы.

Часы CLOCK_PROCESS_CPUTIME_ID измеряют пользовательское и системное процессорное время, затраченное вызывающим процессом. Часы CLOCK_THREAD_CPUTIME_ID выполняют аналогичное действие, но работают на уровне отдельных потоков внутри процесса.

Все часы, перечисленные в табл. 23.1, входят в стандарт SUSv3, но обязательной и широко распространенной в UNIX-системах является только константа CLOCK_REALTIME.

В Linux 2.6.28 появился новый тип часов, CLOCK_MONOTONIC_RAW, которые доступны только для чтения. Они похожи на CLOCK_MONOTONIC, но предоставляют доступ к «сырому» аппаратному времени, без корректировки со стороны службы NTP. Эти часы являются нестандартными и предназначены для использования в специализированных приложениях для синхронизации времени.

В Linux 2.6.32 появилось еще два типа часов: CLOCK_REALTIME_COARSE и CLOCK_MONOTIC_COARSE. Они похожи на CLOCK_REALTIME и CLOCK_MONOTONIC, но предназначены для приложений, которым нужно получать не самые точные временные метки с минимальной затратой ресурсов. Эти нестандартные константы не предоставляют доступа к аппаратным часам (что в случае с некоторыми источниками времени может оказаться довольно затратным), а точность возвращаемых ими значений соответствует минимальному временному интервалу (см. раздел 10.6).


23.5.2. Изменение значения часов: вызов clock_settime()

Системный вызов clock_settime() устанавливает время, хранящееся в буфере, на который указывает аргумент tp, для часов, определенных с помощью clockid.

#define _POSIX_C_SOURCE 199309

#include


int clock_settime(clockid_t clockid, const struct timespec *tp);

Возвращает 0 при успешном завершении или –1, если случилась ошибка

Если время, указанное с помощью tp, не является кратным минимальному временному интервалу (который возвращается вызовом clock_getres()), оно округляется в меньшую сторону.

Изменение часов CLOCK_REALTIME доступно привилегированному процессу (CAP_SYS_TIME). Их начальное значение обычно равно времени, прошедшему с начала эры UNIX. Из всех часов, перечисленных в табл. 23.1, это единственные, которые можно изменять.

Согласно стандарту SUSv3 система может позволить устанавливать время для часов CLOCK_PROCESS_CPUTIME_ID и CLOCK_THREAD_CPUTIME_ID. На момент написания данной книги в Linux эти часы были доступны только для чтения.


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

Функции, описанные в этом разделе, позволяют получить идентификатор часов, которые измеряют процессорное время, потребленное конкретным процессом или потоком. Полученное значение можно передать вызову clock_gettime(), чтобы определить, сколько всего процессорного времени потребил процесс или поток.

Функция clock_getcpuclockid() возвращает идентификатор часов для процесса pid; итоговое значение хранится в буфере, на который указывает аргумент clockid.

#define _XOPEN_SOURCE 600

#include


int clock_getcpuclockid(pid_t pid, clockid_t *clockid);

Возвращает 0 при успешном завершении или положительный код ошибки

Если аргумент pid равен 0, вызов clock_getcpuclockid() возвращает идентификатор часов текущего процесса.

Функция pthread_getcpuclockid() аналогична вызову clock_getcpuclockid(), но работает с потоками POSIX. Она возвращает идентификатор часов, которые измеряют процессорное время, потребленное определенным потоком в рамках вызывающего процесса.

#define _XOPEN_SOURCE 600

#include

#include


int pthread_getcpuclockid(pthread_t thread, clockid_t *clockid);

Возвращает 0 при успешном завершении или положительный код ошибки

Аргумент thread обозначает идентификатор POSIX-потока, часы которого нас интересуют. Идентификатор часов возвращается в буфере, на который указывает аргумент clockid.


23.5.4. Улучшенный переход в режим сна (высокая точность): вызов clock_nanosleep()

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных