Точные метки времени с использованием gettimeofday и localtime - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь отслеживать системное время, прошедшее между несколькими приложениями и путями данных, через gettimeoday и localtime. В этом примере я хочу получить системное время (микросекундное разрешение) непосредственно перед выполнением моего кода. В настоящее время я делаю это так:

#include <stdio.h>
#include <sys/time.h>

struct timeval tv;
struct timezone tz;
struct tm *tm;

**code I don't care about**

gettimeofday(&tv, NULL);
tm=localtime(&tv.tv_sec);

**code to watch**    

printf(" %d:%02d:%02d %ld \n", tm->tm_hour, tm->tm_min,
            tm->tm_sec, tv.tv_usec);

Из того, что я понимаю, вызов местного времени определенно несет некоторые накладные расходы и может снизить точность. Я могу быть совершенно неправ в этом, но я должен подождать, чтобы позвонить по местному времени, пока мой код для просмотра не завершится? Я предполагаю, что localtime просто делает недешевое преобразование результатов gettimeofday, и поэтому его следует поместить прямо перед оператором printf.

1 Ответ

2 голосов
/ 05 мая 2011

Если вам действительно нужна микросекундная точность, да.Я был бы очень удивлен, если бы localtime выполнялся менее чем за микросекунду.Но я также был бы удивлен, если бы gettimeofday имел разрешение в микросекундах, и даже если фактический таймер имел (крайне маловероятно), переключение контекста при возврате из системы, вероятно, займет больше микросекунды (и может быть дольше, чемпозвоните по номеру localtime).Дело в том, что кроме прямого доступа к специальному оборудованию, вы не сможете получить разрешение, близкое к микросекундному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...