打印时间以秒为单位

时间:2013-04-01 18:41:56

标签: c++ time time-t

我正在编写一个程序,并尝试计算给定代码块运行时经过的秒数。之后我想打印在几秒钟内运行代码块所花费的总时间。我写的是:

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小数精度的任何时间。

5 个答案:

答案 0 :(得分:6)

您可以使用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;
}

Demo

答案 1 :(得分:5)

time的返回值是整数秒。投射到double不会带回丢失的小数秒。

您需要更精确的时钟功能,例如gettimeofday(如果您需要挂钟时间)或times(如果您需要CPU时间)。

在Windows上,有timeGetTimeQueryPerformanceCounter(Castiblanco演示)或GetSystemTimeAsFileTime

C ++终于得到了一些带有C ++ 11 <chrono>标题的标准高分辨率时钟函数,由Chris在评论中提出。

答案 2 :(得分:2)

实际上我更喜欢用毫秒来做,因为如果你只使用几秒就有大量的函数可以返回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;
}

答案 3 :(得分:1)

您可以使用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();
}

答案 4 :(得分:0)

这样的事情应该有效:

#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);
}