Описание функций языка Си
All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
ctime – преобразование времени в текстовую строку
#include
char* ctime (const time_t *ttime);
ttime – указатель на переменную, содержащую время в секундах с 0 часов 1 января 1970 года.
Указатель на строку, содержащую преобразованные дату и время.
Функция ctime () преобразует время в секундах, истекшее с 0 часов 1 января 1970 года (показание системных часов CLOCK_REALTIME) в текстовую строку, с учетом часового пояса. То есть функция ctime () эквивалентна последовательному выполнению функций localtime() и asctime().
Внимание! Не рекомендуется использовать функцию ctime () в многопоточных приложениях, так как данные функции использует общий буфер для сохранения преобразованного времени и одновременный вызов функции из разных потоков может привести к неверному результату работы. Для работы в многопоточных приложениях используйте функцию ctime_r().
Преобразованная строка имеет вид: «Нед. Мес. Ден. Час:Mин:Сек Год\n\0», где:
Нед – день недель (3 символа),
Мес – название месяца (3 символа),
Ден – число (2 символа),
Час – часы (2 символа),
Мин – минуты (2 символа),
Сек – секунды (2 символа),
Год – Год (4 символа).
В примере определяется текущее время в секундах, преобразуется в локальное время (с учетом часового пояса), а затем в текстовую строку (день месяц число часы : минуты : секунды год) и результат выводится на консоль.
ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s
Преобразуют значение времени в строку и настраивают его в соответствии с параметрами локального часового пояса. Это версии функции ctime, _ctime64, _wctime, _wctime64 с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.
Синтаксис
Параметры
саурцетиме представляет дату до полуночи 1 января 1970 г., UTC.
Если используется _ctime32_s или _wctime32_s и саурцетиме представляет дату после 23:59:59 18 января 2038 года в формате UTC.
Если используется _ctime64_s или _wctime64_s и саурцетиме представляет дату после 23:59:59, 31 декабря 3000, UTC.
При использовании _ctime_s или _wctime_sэти функции являются оболочками для предыдущих функций. См. раздел «Примечания».
numberOfElements
Размер буфера.
саурцетиме
Указатель на сохраненное время.
Возвращаемое значение
Нуль при успешном завершении. В случае отказа в связи с недопустимым параметром вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, возвращается код ошибки. Коды ошибок определены в файле ERRNO.H; список этих ошибок см. в разделе errno. Фактические коды ошибок, отображаемые для каждого условия ошибки, представлены в следующей таблице.
Ситуации, которые могут привести к ошибке
| двойной | numberOfElements | саурцетиме | Возвращает | Значение в буфере |
|---|---|---|---|---|
| NULL | any | any | еинвал | Без изменений |
| Not null (указывает на допустимый объем памяти) | 0 | any | еинвал | Без изменений |
| Не null | 0 = 26 | NULL | еинвал | Пустая строка. |
| Не null | >= 26 | Wed Jan 02 02:03:55 1980\n\0 |
Время в 24-часовом формате. Все поля имеют постоянную ширину. Символ новой строки («\n») и нуль-символ («\0») занимают две последние позиции строки.
_wctime32_s и _wctime64_s — это версия _ctime32_s и _ctime64_sс расширенными символами; Возвращение указателя на строку расширенных символов. В противном случае _ctime64_s, _wctime32_sи _wctime64_s ведут себя одинаково для _ctime32_s.
В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.
Версии отладочной библиотеки этих функций сначала заполняют буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
| Подпрограмма TCHAR.H | &Не определено _UNICODE _MBCS | _MBCS определено | _UNICODE определено |
|---|---|---|---|
| _tctime_s | ctime_s | ctime_s | _wctime_s |
| _tctime32_s | _ctime32_s | _ctime32_s | _wctime32_s |
| _tctime64_s | _ctime64_s | _ctime64_s | _wctime64_s |
Требования
| Подпрограмма | Обязательный заголовок |
|---|---|
| ctime_s, _ctime32_s_ctime64_s | |
| _wctime_s, _wctime32_s_wctime64_s | или |
Дополнительные сведения о совместимости см. в статье Compatibility.
ctime, _ctime32, _ctime64, _wctime, _wctime32, _wctime64
Преобразуют значение времени в строку и настраивают его в соответствии с параметрами локального часового пояса. Доступны более безопасные версии этих функций; см. раздел ctime_s _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s.
Синтаксис
Параметры
саурцетиме
Указатель на сохраненное время для преобразования.
Возвращаемое значение
Указатель на результирующую строку символов. Значение NULL будет возвращено, если:
саурцетиме представляет дату до полуночи 1 января 1970 г., UTC.
Если используется _ctime32 или _wctime32 и саурцетиме представляет дату после 23:59:59 18 января 2038 года в формате UTC.
Если используется _ctime64 или _wctime64 и саурцетиме представляет дату после 23:59:59, 31 декабря 3000, UTC.
Комментарии
Время в 24-часовом формате. Все поля имеют постоянную ширину. Символ новой строки («\n») и нуль-символ («\0») занимают две последние позиции строки.
_wctime и _wctime64 — это версия CTime и _ctime64для расширенных символов; Возвращение указателя на строку расширенных символов. В противном случае _ctime64, _wctimeи _wctime64 ведут себя идентично CTime.
Эти функции проверяют свои параметры. Если саурцетиме является пустым указателем или значение саурцетиме является отрицательным, эти функции вызывают обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, функции возвращают значение NULL и задают значениееинвал.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
| Подпрограмма TCHAR.H | &Не определено _UNICODE _MBCS | _MBCS определено | _UNICODE определено |
|---|---|---|---|
| _tctime | CTime | CTime | _wctime |
| _tctime32 | _ctime32 | _ctime32 | _wctime32 |
| _tctime64 | _ctime64 | _ctime64 | _wctime64 |
Требования
| Подпрограмма | Обязательный заголовок |
|---|---|
| CTime | |
| _ctime32 | |
| _ctime64 | |
| _wctime | или |
| _wctime32 | или |
| _wctime64 | или |
Дополнительные сведения о совместимости см. в статье Compatibility.
Класс CTime
Представляет абсолютное время и дату.
Синтаксис
Члены
Открытые конструкторы
Открытые методы
Операторы
Комментарии
CTime не имеет базового класса.
Сопровождающий класс, ктимеспан, представляет интервал времени.
CTime Классы и CTimeSpan не предназначены для наследования. Поскольку нет виртуальных функций, размер CTime CTimeSpan объектов и равен 8 байт. Большинство функций членов являются встроенными.
Верхний предел для даты равен 12/31/3000. Нижний предел — 1/1/1970 12:00:00 AM по ГРИНВИЧу.
CTime Структура изменилась с mfc 7,1 на mfc 8,0. При сериализации структуры с CTime помощью CTime в MFC 8,0 или более поздней версии полученный файл не будет доступен для чтения в более старых версиях MFC.
Требования
Заголовок: атлтиме. h
Операторы сравнения CTime
Параметры
Возвращаемое значение
Эти операторы сравнивают два абсолютных значения времени и возвращают значение TRUE, если условие истинно. в противном случае — FALSE.
Пример
CTime:: CTime
Создает новый CTime объект, инициализируемый с указанным временем.
Параметры
тимесрк
Указывает CTime уже существующий объект.
time
__time64_t Значение времени, которое представляет собой число секунд после 1 января 1970 UTC. Обратите внимание, что это значение будет изменено на местное время. Например, если вы используете Нью-Йорк и создаете CTime объект, передав параметр 0, CTime GetObject возвратит 12.
НЕАР, нмонс, nОшибка дня, nчас суток, nмин., NSEC
Указывает значения даты и времени, которые должны быть скопированы в новый CTime объект.
ндст
Указывает, действует ли летнее время. Может иметь одно из трех значений:
для НДСТ задано значение 0Standard Time.
для НДСТ задано значение больше, чем 0Daylight экономия времени.
для НДСТ задано значение меньше 0The по умолчанию. Автоматически вычислит, действует ли стандартное время или летнее время.
вдосдате, вдостиме
Значения даты и времени MS-DOS, которые должны быть преобразованы в значение даты и времени и скопированы в новый CTime объект.
DBTS
Ссылка на структуру DBTIMESTAMP, содержащую текущее местное время.
Комментарии
Каждый конструктор описан ниже.
CTime(); Конструирует неинициализированный CTime объект. Этот конструктор позволяет определять CTime массивы объектов. Следует инициализировать такие массивы с допустимыми значениями времени перед использованием.
CTime( const CTime& ); Конструирует CTime объект из другого CTime значения.
| Компонент | Диапазон |
|---|---|
| неар | 1970-3000 |
| нмонс | 1–12 |
| nОшибка дня | 1–31 |
| Nчас суток | 0-23 |
| Nмин. | 0-59 |
| nSec | 0-59 |
Этот конструктор выполняет соответствующее преобразование в формате UTC. Отладочная версия библиотека Microsoft Foundation Class утверждает, если один или несколько компонентов времени выходят за пределы диапазона. Перед вызовом необходимо проверить аргументы. Этот конструктор принимает местное время.
CTime( WORD, WORD ); Конструирует CTime объект на основе указанных значений даты и времени MS-DOS. Этот конструктор принимает местное время.
CTime( const SYSTEMTIME& ); Конструирует CTime объект из SYSTEMTIME структуры. Этот конструктор принимает местное время.
CTime( const FILETIME& ); Конструирует CTime объект из FILETIME структуры. Скорее всего, инициализация не будет использоваться CTime FILETIME напрямую. Если CFile для работы с файлом используется объект, CFile::GetStatus получает отметку времени файла для вас через CTime объект, инициализируемый FILETIME структурой. Этот конструктор предполагает время на основе времени в формате UTC и автоматически преобразует значение в местное время перед сохранением результата.
Конструктор, использующий DBTIMESTAMP параметр, доступен только при включении OLEDB. h.
дополнительные сведения см. в разделе структура SYSTEMTIME и FILETIME в Windows SDK. см. также запись даты и времени MS-DOS в Windows SDK.
Пример
CTime:: Format
Вызовите эту функцию-член для создания форматированного представления значения даты и времени.
Параметры
нформатид
Идентификатор строки, определяющей этот формат.
Возвращаемое значение
Комментарии
Если состояние этого CTime объекта равно null, то возвращаемое значение является пустой строкой.
Этот метод создает исключение, если значение даты и времени для форматирования не находится в диапазоне от полуночи 1 января 1970 до 31 декабря 3000, время в формате UTC.
Пример
CTime:: Форматгмт
Формирует отформатированную строку, соответствующую этому CTime объекту.
Параметры
нформатид
Идентификатор строки, определяющей этот формат.
Возвращаемое значение
Комментарии
Значение времени не преобразуется, поэтому оно отражает время в формате UTC.
Этот метод создает исключение, если значение даты и времени для форматирования не находится в диапазоне от полуночи 1 января 1970 до 31 декабря 3000, время в формате UTC.
Пример
CTime:: Жетасдбтиместамп
Вызовите эту функцию-член для преобразования сведений о времени, хранящихся в CTime объекте, в структуру DBTimeStamp, совместимую с Win32.
Параметры
DBTS
Ссылка на структуру DBTIMESTAMP, содержащую текущее местное время.
Возвращаемое значение
Имеет ненулевое значение в случае успешного выполнения, иначе — 0.
Комментарии
Пример
CTime:: Жетассистемтиме
Параметры
Возвращаемое значение
Значение TRUE, если успешно; в противном случае — FALSE.
Комментарии
GetAsSystemTime сохраняет результирующее время в указанной GetAsSystemTime структуре. SYSTEMTIME Для структуры данных, инициализированной этой функцией, член будет иметь wMilliseconds значение 0.
Пример
CTime:: Жеткурренттиме
Возвращает CTime объект, представляющий текущее время.
Комментарии
Возвращает текущую системную дату и время в формате UTC.
Пример
CTime:: GetDay
Возвращает день, представленный CTime объектом.
Возвращаемое значение
Возвращает день месяца, основанный на местном времени, в диапазоне от 1 до 31.
Комментарии
Пример
CTime:: Жетдайофвик
Возвращает день недели, представленный CTime объектом.
Возвращаемое значение
Возвращает день недели, основанный на местном времени; 1 = воскресенье, 2 = понедельник, 7 = суббота.
Комментарии
Пример
CTime:: Жетгмттм
Параметры
PTM
Указывает на буфер, который будет принимать данные времени. Если этот указатель имеет значение NULL, возникает исключение.
Возвращаемое значение
Комментарии
GetGmtTm Возвращает время в формате UTC.
PTM не может иметь значение null. Если необходимо вернуться к старому поведению, в котором PTM может иметь значение null, чтобы указать, что следует использовать внутренний, выделенный статический буфер, а затем отменить определение _SECURE_ATL.
Пример
CTime:: в час
Возвращает час, представленный CTime объектом.
Возвращаемое значение
Возвращает час, основанный на местном времени, в диапазоне от 0 до 23.
Комментарии
Пример
CTime:: Жетлокалтм
Параметры
PTM
Указывает на буфер, который будет принимать данные времени. Если этот указатель имеет значение NULL, возникает исключение.
Возвращаемое значение
Комментарии
GetLocalTm Возвращает местное время.
PTM не может иметь значение null. Если необходимо вернуться к старому поведению, в котором PTM может иметь значение null, чтобы указать, что следует использовать внутренний, выделенный статический буфер, а затем отменить определение _SECURE_ATL.
Пример
CTime:: Minute
Возвращает минуты, представленную CTime объектом.
Возвращаемое значение
Возвращает минуты в диапазоне от 0 до 59 в зависимости от местного времени.
Комментарии
Пример
См. пример для в течение часа.
CTime:: в месяц
Возвращает месяц, представленный CTime объектом.
Возвращаемое значение
Возвращает месяц, основанный на местном времени, в диапазоне от 1 до 12 (1 = Январь).
Комментарии
Пример
CTime:: в секунду
Возвращает секунду, представленную CTime объектом.
Возвращаемое значение
Возвращает второй объект, основанный на местном времени, в диапазоне от 0 до 59.
Комментарии
Пример
См. пример для в течение часа.
CTime:: во время
Возвращает __time64_t значение для заданного объекта.
Возвращаемое значение
GetTime Возвращает количество секунд между текущим CTime объектом и 1 января 1970.
Пример
CTime:: в г.
Возвращает год, представленный CTime объектом.
Возвращаемое значение
Возвращает год, основанный на местном времени, в диапазоне от 1 января 1970 г. до 18 января 2038 (включительно).
Комментарии
Пример
CTime:: operator =
Параметры
time
Новое значение даты и времени.
Возвращаемое значение
Обновленный CTime объект.
Комментарии
Этот перегруженный оператор присваивания копирует время источника в этот CTime объект. Внутреннее хранилище времени в CTime объекте не зависит от часового пояса. Во время назначения Преобразование часового пояса не требуется.
CTime:: operator +,-
Эти операторы добавляют и вычитают CTimeSpan CTime объекты и.
Параметры
Временной
CTimeSpan Добавляемый или вычитаемый объект.
time
CTime Объект для вычитания.
Возвращаемое значение
CTime Объект или, CTimeSpan представляющий результат операции.
Комментарии
CTime объекты представляют собой абсолютное время, а CTimeSpan объекты представляют относительное время. Первые два оператора позволяют добавлять и вычитать CTimeSpan объекты в объектах и из CTime них. Третий оператор позволяет вычесть один CTime объект из другого, чтобы получить CTimeSpan объект.
Пример
CTime:: operator + =,-=
Параметры
размещать
CTimeSpan Добавляемый или вычитаемый объект.
Возвращаемое значение
Обновленный CTime объект.
Комментарии
Пример
CTime:: Serialize64
Этот метод доступен только в проектах MFC.
Сериализует данные, связанные с переменной члена, в архив или из архива.
Параметры
ar
CArchive Объект, который требуется обновить.
C/C++: как измерять процессорное время

КДПВ
P.S. Когда в статье написано «сегодня» или «сейчас», имеется ввиду «на момент выхода статьи», то есть, если я не ошибаюсь, март 2012. Ни я, ни автор не гарантируем, что это до сих пор так.
P.P.S. На момент публикации оригинал недоступен, но хранится в кэше Яндекса
Функции API, позволяющие получить процессорное время, использованное процессом, отличаются в разных операционных системах: Windows, Linux, OSX, BSD, Solaris, а также прочих UNIX-подобных ОС. Эта статья предоставляет кросс-платформенную функцию, получающую процессорное время процесса и объясняет, какие функции поддерживает каждая ОС.
Как получить процессорное время
Процессорное время увеличивается, когда процесс работает и потребляет циклы CPU. Во время операций ввода-вывода, блокировок потоков и других операций, которые приостанавливают работу процессора, процессорное время не увеличивается пока процесс снова не начнет использовать CPU.
Разные инструменты, такие как ps в POSIX, Activity Monitor в OSX и Task Manager в Windows показывают процессорное время, используемое процессами, но часто бывает полезным отслеживать его прямо из самого процесса. Это особенно полезно во время бенчмаркинга алгоритмов или маленькой части сложной программы. Несмотря на то, что все ОС предоставляют API для получения процессорного времени, в каждой из них есть свои тонкости.
Далее мы подробно обсудим все функции, тонкости и причины, по которым в коде столько #ifdef ‘ов.
Использование
Чтобы замерить процессорное время алгоритма, вызовите getCPUTime( ) до и после запуска алгоритма, и выведите разницу. Не стоит предполагать, что значение, возвращенное при единичном вызове функции, несет какой-то смысл.
Обсуждение
Каждая ОС предоставляет один или несколько способов получить процессорное время. Однако некоторые способы точнее остальных.
| OS | clock | clock_gettime | GetProcessTimes | getrusage | times |
|---|---|---|---|---|---|
| AIX | yes | yes | yes | yes | |
| BSD | yes | yes | yes | yes | |
| HP-UX | yes | yes | yes | yes | |
| Linux | yes | yes | yes | yes | |
| OSX | yes | yes | yes | ||
| Solaris | yes | yes | yes | yes | |
| Windows | yes |
Каждый из этих способов подробно освещен ниже.
GetProcessTimes( )
На Windows и Cygwin (UNIX-подобная среда и интерфейс командной строки для Windows), функция GetProcessTimes( ) заполняет структуру FILETIME процессорным временем, использованным процессом, а функция FileTimeToSystemTime( ) конвертирует структуру FILETIME в структуру SYSTEMTIME, содержащую пригодное для использования значение времени.
Доступность GetProcessTimes( ): Cygwin, Windows XP и более поздние версии.
Получение процессорного времени:
clock_gettme( )
Однако, есть несколько тонкостей, затрудняющих использование этой функции в кросс-платформенном коде:
На практике из-за всех этих тонкостей, использование clock_gettime( ) требует много проверок с помощью #ifdef и возможность переключиться на другую функцию, если она не срабатывает.
Доступность clock_gettime( ): AIX, BSD, Cygwin, HP-UX, Linux и Solaris. Но clock id на BSD и HP-UX нестандартные.
Доступность clock_getres( ): AIX, BSD, Cygwin, HP-UX и Linux, но не работает Solaris.
Доступность clock_getcpuclockid( ): AIX и Cygwin, не недостоверна на Linux.
Получение процессорного времени:
getrusage( )
На всех UNIX-подобных ОС, функция getrusage( ) это самый надежный способ получить процессорное время, использованное текущим процессом. Функция заполняет структуру rusage временем в секундах и микросекундах. Поле ru_utime содержит время проведенное в user mode, а поле ru_stime — в system mode от имени процесса.
Доступность getrusage( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX, and Solaris.
Получение процессорного времени:
times( )
На всех UNIX-подобных ОС, устаревшая функция times( ) заполняет структуру tms с процессорным временем в тиках, а функция sysconf( ) возвращает количество тиков в секунду. Поле tms_utime содержит время, проведенное в user mode, а поле tms_stime — в system mode от имени процесса.
Внимание: Более старый аргумент функции sysconf( ) CLK_TCK устарел и может не поддерживаться в некоторых ОС. Если он доступен, функция sysconf( ) обычно не работает при его использовании. Используйте _SC_CLK_TCK вместо него.
Доступность times( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX и Solaris.
Получение процессорного времени:
clock( )
На всех UNIX-подобных ОС, очень старая функция clock( ) возвращает процессорное время процесса в тиках, а макрос CLOCKS_PER_SEC количество тиков в секунду.
Заметка: Возвращенное процессорное время включает в себя время проведенное в user mode И в system mode от имени процесса.
Внимание: Хотя изначально CLOCKS_PER_SEC должен был возвращать значение, зависящее от процессора, стандарты C ISO C89 и C99, Single UNIX Specification и стандарт POSIX требуют, чтобы CLOCKS_PER_SEC имел фиксированное значение 1,000,000, что ограничивает точность функции микросекундами. Большинство ОС соответствует этим стандартам, но FreeBSD, Cygwin и старые версии OSX используют нестандартные значения.
Внимание: В Windows, функция clock( ) поддерживается, но возвращает не процессорное, а реальное время.
Доступность clock( ): AIX, BSD, Cygwin, HP-UX, Linux, OSX и Solaris.
Получение процессорного времени:
Другие подходы
Существуют и другие ОС-специфичные способы получить процессорное время. На Linux, Solarisи некоторых BSD, можно парсить /proc/[pid]/stat, чтобы получить статистику процесса. На OSX, приватная функция API proc_pidtaskinfo( ) в libproc возвращает информацию о процессе. Также существуют открытые библиотеки, такие как libproc, procps и Sigar.
На UNIX существует несколько утилит позволяющих отобразить процессорное время процесса, включая ps, top, mpstat и другие. Можно также использовать утилиту time, чтобы отобразить время, потраченное на команду.
На Windows, можно использовать диспетчер задач, чтобы мониторить использование CPU.
На OSX, можно использовать Activity Monitor, чтобы мониторить использование CPU. Утилита для профайлинга Instruments поставляемая в комплекте с Xcode может мониторить использование CPU, а также много других вещей.



