我正在使用这样的东西来计算我的程序从开始到结束需要多长时间:
int main(){
clock_t startClock = clock();
.... // many codes
clock_t endClock = clock();
printf("%ld", (endClock - startClock) / CLOCKS_PER_SEC);
}
我的问题是,由于有多个进程在同一时间运行,比如说我的进程处于空闲的时间是多长时间,那么该时间会在我的程序中进行计时吗? / p>
基本上我关心的是,比如说有1000个时钟周期,但是我的流程只使用了500个,我会从(endClock - startClock)
获得500或1000吗?
感谢。
答案 0 :(得分:11)
这取决于操作系统。在Windows上,clock()
衡量壁垒时间。在Linux / Posix上,它测量所有线程的组合CPU时间。
如果您想在Linux上使用壁挂时间,则应使用gettimeofday()
。
如果您想在Windows上使用CPU时间,则应使用GetProcessTimes()
。
编辑:
因此,如果您使用的是Windows,则clock()
将 来衡量空闲时间。
在Linux上,clock()
不会 衡量空闲时间。
答案 1 :(得分:2)
clock
测量cpu时间,但它通常具有极差的分辨率。相反,现代程序应使用clock_gettime
CLOCK_PROCESS_CPUTIME_ID
时钟ID。这将产生纳秒分辨率的结果,通常它实际上就是那么好。
答案 2 :(得分:1)
根据手册页(在Linux中)的定义,
clock()函数返回所用处理器时间的近似值 通过该计划。
它会尽可能准确,但正如你所说,某些时间(例如,流程切换)很难对流程进行说明,因此数字将尽可能准确,但并不完美。< / p>