3

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

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

4

5 回答 5

7

您可以使用 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;
}
于 2013-04-01T18:50:10.120 回答
5

from 的返回值time是整数秒。转换为 adouble不会带回丢失的小数秒。

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

在 Windows 上,有timeGetTime, QueryPerformanceCounter(Castiblanco 演示过)或GetSystemTimeAsFileTime.

C++ 终于得到了一些标准的高分辨率时钟函数和 C++11 的<chrono>头文件,这是 chris 在评论中建议的。

于 2013-04-01T18:44:10.870 回答
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;
}
于 2013-04-01T18:45:21.810 回答
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();
}
于 2013-04-01T18:52:34.193 回答
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);
} 
于 2013-04-01T18:47:01.920 回答