关于clock()
from生成的时钟滴答计数的问题<ctime>
。(其他问题clock()
中涵盖了的用法)
在我的系统clock_t
上是一个别名,long
根据我的编译器,它的最大值<climits>
是 2147483647。
clock_t delay = clock_t(10) * CLOCKS_PER_SEC;
clock_t start = clock();
while(clock() - start < delay); //Note Semi-colon here makes this null statement
std::cout << clock();
运行这个我得到大约 10060。这与 d(对于我的系统)为 1000 是一致CLOCKS_PER_SEC
的#define
。
因此,如果有 1000CLOCKS_PER_SEC
则 2147483647 / 1000 = 2147483.647 秒,大约需要 24-25 天。
我不确定它是否实际上是由 C++ 定义的行为,但我注意到超出long
限制的常见行为是换行到负端。
例如,
long m = long(2147483647);
std::cout << ++m << std::endl;
将输出:-2147483648
所以假设程序在初始化之前已经运行了很长时间start
,并且start
恰好被初始化为 2147483647(最大可能long
值)。
在这一点上,我假设我们将开始包装返回的值,clock()
以便在我们再次接近 2147483647 时获取诸如 -2147482649 之类的值。所以现在我的原始代码可能需要很长时间才能完成循环,比预期的延迟要长得多。
是实际行为吗?这种风格的暂停应该只用于小于一定数量的延迟吗?是否应该进行其他检查以使其“安全”?