Как узнать время моей программы с помощью gettimeofday () - PullRequest
1 голос
/ 24 января 2010

Итак, я получаю время в начале кода, запускаю его, а затем получаю время.

struct timeval begin, end;
gettimeofday(&begin, NULL);

//code to time

gettimeofday(&end, NULL);
//get the total number of ms that the code took:
unsigned int t = end.tv_usec - begin.tv_usec;

Теперь я хочу распечатать его в виде «** код занял 0,007 секунды для запуска» или что-то подобное.

Итак, две проблемы:

1) t, кажется, содержит значение порядка 6000, и я ЗНАЮ, что запуск кода не занял 6 секунд.

2) Как я могу преобразовать t в double, учитывая, что это целое число без знака? Или есть более простой способ напечатать вывод, как я хотел?

Ответы [ 2 ]

15 голосов
/ 24 января 2010

timeval содержит два поля, часть секунд и часть микросекунд.

tv_usec ( u означает греческую букву mu , что означает микро) - это микросекунды. Таким образом, когда вы получаете 6000, это 6000 микросекунд прошло. tv_sec содержит часть секунд.

Чтобы получить двойное значение, используйте этот код:

double elapsed = (end.tv_sec - begin.tv_sec) + 
              ((end.tv_usec - begin.tv_usec)/1000000.0);

Убедитесь, что вы включили в свои расчеты часть tv_sec. gettimeofday возвращает текущее время, поэтому при увеличении секунд микросекунда вернется к 0, если это произойдет во время выполнения кода и если вы не используете tv_sec в своих вычислениях, вы получите отрицательное число.

6 голосов
/ 24 января 2010

1) Это потому, что usec - это не 6000 миллисекунд, это 6000 микросекунд (6 миллисекунд или 6 тысячных долей секунды).

2) Попробуйте: (double)t / 1000000 Это преобразует t в двойное число, а затем разделит его на миллион, чтобы найти количество секунд вместо числа микросекунд.

...