【发布时间】:2010-08-30 02:00:53
【问题描述】:
我试图编写一个 Timer 类(不知道 boost 有一个),然后当它不起作用时,我尝试使用以下代码仅输出 clock() 的值:
#include <ctime>
#include <iostream>
int main()
{
for(int i = 0; i < 50; ++i)
{
std::cout << std::clock() << " ";
}
return 0;
}
当我运行程序时,我得到一系列 0。在使用 boost thread sleep 函数将时间延长一点时,我也有类似的经历(尽管几秒钟后,它会从 0 跳到 10,000 并保持输出 10,000)。
我正在运行 Gentoo Linux。这是平台的事情吗?一个 C++ 的东西?怎么回事?
编辑:奇怪的是,跳转到 10000 是在 秒 之后,而不是毫秒。当我一次睡一秒钟时,需要五六秒钟才能达到 10000。但是,如果我理解正确的话。线程睡眠的时间对时钟()计数没有贡献吗? (这是有道理的;如果它正在休眠,为什么要执行时钟周期?)
【问题讨论】:
-
没错。当您的线程休眠时,系统不会将其调度到 CPU 并且
clock()计数被冻结。在您的示例中,只有在醒来和再次入睡之间的短暂时间跨度才重要。 -
请注意,clock() 返回整个程序的 CPU 时间,对所有线程求和。见stackoverflow.com/a/5035854/13422