如何在 C + + 中使用时钟()

C++中如何调用 clock()

例如,我想测试线性搜索在数组中找到给定元素所需的时间。

425254 次浏览

clock()返回程序启动后的时钟滴答次数。有一个相关的常量,CLOCKS_PER_SEC,它告诉你有多少时钟滴答声发生在一秒钟。因此,您可以像下面这样测试任何操作:

clock_t startTime = clock();
doSomeOperation();
clock_t endTime = clock();
clock_t clockTicksTaken = endTime - startTime;
double timeInSeconds = clockTicksTaken / (double) CLOCKS_PER_SEC;
#include <iostream>
#include <cstdio>
#include <ctime>


int main() {
std::clock_t start;
double duration;


start = std::clock();


/* Your algorithm here */


duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;


std::cout<<"printf: "<< duration <<'\n';
}
#include <iostream>
#include <ctime>
#include <cstdlib> //_sleep()  --- just a function that waits a certain amount of milliseconds


using namespace std;


int main()
{


clock_t cl;     //initializing a clock type


cl = clock();   //starting time of clock


_sleep(5167);   //insert code here


cl = clock() - cl;  //end point of clock


_sleep(1000);   //testing to see if it actually stops at the end point


cout << cl/(double)CLOCKS_PER_SEC << endl;  //prints the determined ticks per second (seconds passed)




return 0;
}


//outputs "5.17"

另一种解决方案是使用 std::chrono,它是可移植的,而且具有更高的精度,这是自 C + + 11以来就有的。

这里有一个例子:

#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;


int main()
{
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << "Delta t2-t1: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
<< " nanoseconds" << std::endl;
}

在 ideone.com 上运行这个给了我:

Delta t2-t1: 282 nanoseconds

也许你会对这样的计时器感兴趣: H: M: S. Msec.

Linux 操作系统中的代码:

#include <iostream>
#include <unistd.h>


using namespace std;
void newline();


int main() {


int msec = 0;
int sec = 0;
int min = 0;
int hr = 0;




//cout << "Press any key to start:";
//char start = _gtech();


for (;;)
{
newline();
if(msec == 1000)
{
++sec;
msec = 0;
}
if(sec == 60)
{
++min;
sec = 0;
}
if(min == 60)
{
++hr;
min = 0;
}
cout << hr << " : " << min << " : " << sec << " . " << msec << endl;
++msec;
usleep(100000);


}


return 0;
}


void newline()
{
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
}

至少在 Windows 上,只有实际上精确的度量机制是 QueryPerformanceCounter (QPC)。Chrono 是使用它实现的(因为 VS2015,如果您使用它的话) ,但是它的 没有精确度与直接使用 QueryPerformanceCounter 相当。特别是它声称报告在1纳秒粒度是绝对不正确的。因此,如果您测量的东西需要很短的时间(您的情况可能就是这种情况) ,那么您应该使用 QPC,或者您的操作系统的等价物。我在测量缓存延迟时遇到了这个问题,我在这里草草记下了一些您可能会发现有用的注释; Https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md

您可以测量程序的工作时间。下列函数有助于测量程序启动以来的 CPU 时间:

  • 包含 时间的 C + + (double)clock() / CLOCKS_PER_SEC
  • Pythontime.clock()以秒为单位返回浮点值。
  • JavaSystem.nanoTime()以纳秒为单位返回长值。

我的参考资料 : 算法工具箱第一周课程数据结构和算法的一部分,由加州大学圣地亚哥分校和国家研究大学高等经济学院专门开设

所以你可以在算法后面加上这行代码:

cout << (double)clock() / CLOCKS_PER_SEC;

预期输出 : 表示 clock ticks per second数量的输出