Можно ли получить точное время на C языке? - PullRequest
1 голос
/ 02 марта 2020

Я знаю, что есть <chrono> в c ++, и std::chrono::high_resolution_clock::now() может получить точное время типа std::chrono::high_resolution_clock::time_point. Тем не менее, я использую сырой C язык, поэтому невозможно вызвать эту функцию. Функция time() может получать только время второго уровня.

Моя конечная цель - измерить время выполнения многопоточной программы. Функция clock() суммирует часы всех потоков, поэтому ее нельзя использовать для измерения времени работы.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

К сожалению, часы с более высоким разрешением имеют тенденцию немного отличаться от платформы к платформе. Это также зависит от того, какой тип часов вас интересует (например, реальное время, процессорное время или однообразное c время).

В зависимости от вашего варианта использования, вам, вероятно, нужно однообразное c время…

Если вы работаете в операционной системе POSIX, clock_gettime - это обычно путь к go, но даже в этом случае доступные часы могут сильно различаться. Например, macOS не поддерживает CLOCK_MONOTONI C, но у него есть другие API, которые можно использовать для получения монотонного c времени.

Если вы используете Windows вы, вероятно, захотите использовать QueryPerformanceCounters .

Если вы хотите что-то отвлечь от различий, я соберу что-то вместе некоторое время назад.

0 голосов
/ 02 марта 2020

Следующий фрагмент даст точное системное время:

time_t now;
time(&now);
struct tm* now_tm;
now_tm = localtime(&now);
char dte[80];
strftime (dte, 80, "%Y-%m-%d %I:%M:%S", now_tm);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...