不同操作系统中每秒时钟的行为 我运行CPP代码,但有一件事我注意到,在Windows 7上,C++代码中的CcLoxStPySSEC给出了1000,而在Linux FEDOLA 16上,它给出了1000000。有人能证明这种行为的合理性吗?

不同操作系统中每秒时钟的行为 我运行CPP代码,但有一件事我注意到,在Windows 7上,C++代码中的CcLoxStPySSEC给出了1000,而在Linux FEDOLA 16上,它给出了1000000。有人能证明这种行为的合理性吗?,c++,linux,windows-7,fedora16,C++,Linux,Windows 7,Fedora16,基本上,clock()函数的实现对于不同的操作系统有一定的回旋余地。在Linux Fedora上,时钟的滴答声更快。它每秒滴答100万次 这个时钟滴答声不同于CPU的时钟频率,在不同的抽象层上。Windows尝试使时钟滴答数等于毫秒数 此宏扩展为表示时钟数的表达式 函数时钟返回的滴答声以秒为单位 将时钟滴答数除以此表达式得出该数字 几秒钟 CLK_TCK是此宏的过时别名 参考: 您还应该知道,Windows实现不适用于真正的实时应用程序。通过将硬件时钟除以2的幂得出1000滴答时钟。这意味着他们

基本上,
clock()
函数的实现对于不同的操作系统有一定的回旋余地。在Linux Fedora上,时钟的滴答声更快。它每秒滴答100万次

这个时钟滴答声不同于CPU的时钟频率,在不同的抽象层上。Windows尝试使时钟滴答数等于毫秒数

此宏扩展为表示时钟数的表达式 函数时钟返回的滴答声以秒为单位

将时钟滴答数除以此表达式得出该数字 几秒钟

CLK_TCK是此宏的过时别名

参考:

您还应该知道,Windows实现不适用于真正的实时应用程序。通过将硬件时钟除以2的幂得出1000滴答时钟。这意味着他们实际上得到一个1024滴答的时钟。要将其转换为1000滴答声时钟,Windows将跳过某些滴答声,这意味着某些滴答声比其他滴答声慢


单独的硬件时钟(不是CPU时钟)通常用于定时。参考资料:

什么是合理的<代码>每秒时钟数是实现定义的,可以 什么都可以。它指示函数返回的所有单位
clock()
。它甚至没有指示
clock()
:Posix的分辨率 要求其为1000000,无论实际分辨率如何。如果 Windows返回1000,这可能不是实际分辨率
任何一个(我发现我的Linux设备的分辨率为10ms,Windows设备的分辨率为15ms。)

这取决于操作系统上的clock()实现,有关更多信息,请参阅此问题:如果不同实现之间的分辨率没有变化,则不需要常数。它的存在是因为它取决于实现在这个API下提供什么样的计时器解析。而Windows每秒运行1000次。老实说,最后一段没有意义。如果将3.000.0000.000 Hz的CPU时钟频率除以2的幂,则不会得到1024 Hz的时钟。对于3.1GHz的CPU,您将获得另一个结果。也就是说,它不能像你解释的那样工作。加上现在许多CPU甚至都不以固定的速率运行,使用节能机制,所以实时时钟通常不再计算时钟周期。我有点困惑,如果每秒的时钟与实际的CPU时钟不同,那么它到底给出了什么?对不起,@MSalters,我犯了一个错误,它实际上使用了一个单独的硬件时钟,我更新了答案。@akashdepsaluja是一个任意值,它定义了
clock()
返回的单位。这就是你能说的全部(除了
clock()
在Windows下不工作——它应该返回CPU时间。)好的。。所以clock()函数与处理器的时钟速度无关,它只是计算进程所花费的时间。我说得对吗?@AkashdeepSaluja…计算进程占用的CPU时间,而不是实时。参见伟大的睡眠例子。@AkashdeepSaluja,对
clock()
是一种基本的基准测试工具。它返回任意值(但在我使用的系统上,第一次调用总是返回0)。两次调用之间的差异返回两次调用之间使用的CPU时间,以1秒/
时钟/秒
单位计量。(但是请注意,在Windows下,它将返回经过的时间,而不是CPU时间。)