我的程序中的一些加载例程需要很长时间才能完成.我想要一个快速的小片段来检查函数执行的时间.我的意思是"最好没有第三方图书馆".
也许就像花费系统时间一样简单?
start = current_system_time() load_something() delta = current_system_time()-start log_debug("load took "+delta)
编辑:有问题的目标操作系统是Windows.
你的回答:是的
警告:这将不会在multihtreaded代码或多核计算机上工作,你需要一个强大的挂钟计时器.所以我建议你使用omp的wallclock.OMP包含在VC和GCC中,大多数编译器及其标准您不必担心消失
#include// Starting the time measurement double start = omp_get_wtime(); // Computations to be measured ... // Measuring the elapsed time double end = omp_get_wtime(); // Time calculation (in seconds)
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) namespace win32 { #include} class timer { win32::LARGE_INTEGER start_time_; public: timer() { QueryPerformanceCounter( &start_time_ ); } void restart() { QueryPerformanceCounter( &start_time_ ); } double elapsed() const { win32::LARGE_INTEGER end_time, frequency; QueryPerformanceCounter( &end_time ); QueryPerformanceFrequency( &frequency ); return double( end_time.QuadPart - start_time_.QuadPart ) / frequency.QuadPart; } }; #else #include class timer { clock_t _start_time; public: timer() { _start_time = clock(); } void restart() { _start_time = clock(); } double elapsed() const { return double(clock() - _start_time) / CLOCKS_PER_SEC; } }; #endif template< typename Func > double measure_time( Func f ) { timer t; f(); return t.elapsed(); }
这是一种快速而又脏的方式来计算一块C/C++代码.你需要#include
,这应该是一个标准的标题...
struct timeval start, end; gettimeofday(&start, NULL); // benchmark code gettimeofday(&end, NULL); long long time = (end.tv_sec * (unsigned int)1e6 + end.tv_usec) - (start.tv_sec * (unsigned int)1e6 + start.tv_usec);
这应该在现代Linux系统上提供1-2μs的分辨率(你使用的操作系统是什么?),这意味着它不适合学习<10μs的项目.但是,你似乎没有那种情况.
更新:基于指定的操作系统... gettimeofday()的Windows实现