Время печати в секундах

Я пишу программу и пытаюсь рассчитать количество секунд, которое проходит, когда выполняется данный блок кода. После этого я хотел бы напечатать общее время, необходимое для выполнения блока кода в секундах. Я написал следующее:

time_t start = time(0);
// block of code
double seconds_since_start = difftime(time(0), start);
printf("seconds since start: %2.60f\n", seconds_since_start);

я имею printf() печать с точностью до 60 десятичных знаков, и все еще получается 0,000000 …

Есть ли ошибка в моей функции времени? Мне трудно поверить, что задание, которое я прошу ко времени, не будет учитывать время с точностью до 60 десятичных знаков.

3

Решение

Вы можете использовать утилиты даты и времени, доступные в C ++ 11:

#include <chrono>
#include <iostream>
#include <thread>

int main()
{
auto start = std::chrono::high_resolution_clock::now();

std::this_thread::sleep_for(std::chrono::seconds(5));

auto end = std::chrono::high_resolution_clock::now();

auto difference = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();

std::cout << "Seconds since start: " << difference;
}

демонстрация

6

Другие решения

Возвращаемое значение из time является целым числом секунд. Приведение к double не вернет потерянные доли.

Вам нужна более точная функция часов, такая как gettimeofday (если вы хотите настенные часы) или times (если вы хотите процессорное время).

В Windows есть timeGetTime, QueryPerformanceCounter (что демонстрирует Кастибланко), или GetSystemTimeAsFileTime.

C ++ наконец получил некоторые стандартные функции часов высокого разрешения с C ++ 11 <chrono> заголовок, предложенный Крисом в комментариях.

5

На самом деле я предпочитаю делать это с миллисекундами, потому что есть тонны функций, которые могут возвращать 0, если вы используете только секунды, по этой причине лучше использовать миллисекунды.

#include <time.h>

double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
}int main()
{

LARGE_INTEGER t_inicio, t_final;
double sec;

QueryPerformanceCounter(&t_inicio);

// code here, the code that you need to knos the time.

QueryPerformanceCounter(&t_final);

sec = performancecounter_diff(&t_final, &t_inicio);

printf("%.16g millisegudos\n", sec * 1000.0);*/

}

return 0;
}
2

ты можешь использовать boost::timer

template<typename T>
double sortTime(std::vector<T>& v, typename sort_struct<T>::func_sort f){
boost::timer t; // start timing
f(v);
return t.elapsed();
}
1

Нечто подобное должно работать:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
clock_t begin, end;
double time_spent;

begin = clock();

//Do stuff

end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("%Lf\n",time_spent);
}
0
По вопросам рекламы [email protected]