返回什么time(NULL)
?给定文档,我假设它返回自纪元以来的秒数,但是,当我运行以下代码时:
#include <iostream>
#include "Time.h"
#include "Math.h"
int main () {
double curT = 0;
double curJ = 0;
time_t curTtimeT = 0;
double curJtimeT = 0;
//run indefinitely... use a debugger you can stop :-)
for (double j = 0; j < 2000000000; j++) {
//get the current time
curT = time(NULL);
curTtimeT = time(NULL);
//check if current time equals previous time
if (time(NULL) != curT) {
//output time and approx. "time" through iteration
std::cout << "Time match with doubles:\t" << curT << "\tdeltaJ:\t\t\t" << (j - curJ) <<std::endl;
curT = time(NULL);
curJ = j;
}
if (time(NULL) != curTtimeT) {
//output time and approx. "time" through iteration
std::cout << "Time match with time_t:\t\t" << curTtimeT << "\t\tdeltaJtimeT:\t\t" << (j - curJtimeT) <<std::endl;
curTtimeT = time(NULL);
curJtimeT = j;
}
}
return 0;
}
我得到以下结果(跳过似乎在运行之间没有模式):
Time match with time_t: 1348873002 deltaJtimeT: 290842
Time match with doubles: 1.34887e+09 deltaJ: 2.41017e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08409e+06
Time match with doubles: 1.34887e+09 deltaJ: 2.16587e+06
Time match with time_t: 1348873007 deltaJtimeT: 5.36928e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08696e+06
Time match with time_t: 1348873008 deltaJtimeT: 1.08696e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08534e+06
Time match with doubles: 1.34887e+09 deltaJ: 3.18296e+06
...
Time match with time_t: 1348873122 deltaJtimeT: 2.16217e+06
Time match with doubles: 1.34887e+09 deltaJ: 6.42553e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.08727e+06
Time match with doubles: 1.34887e+09 deltaJ: 2.14147e+06
Time match with doubles: 1.34887e+09 deltaJ: 1.04733e+06
Time match with time_t: 1348873130 deltaJtimeT: 8.42965e+06
注意:我正在使用deltaJ
输出以更数字化的方式显示在控制台实际输出此循环结果时的明显视觉差异。
显然,这似乎并没有始终如一地返回自纪元以来的秒数,因为我反而能够看到非常一致的输出,即每秒double
和time_t
每秒都非常接近 1 行。1348873002
相反,我错过了和之间的整个范围1348873007
- 这些值似乎都没有通过time(NULL)
. 这些间隙在此循环的整个运行时始终出现。
1348873122
此外,有时它甚至在某些秒内不输出(参见和之间的差距1348873130
)。
我不明白为什么输出不显示两种变量类型的一个条目,对于每一秒的实时。相反,它似乎time(NULL)
不一致地返回自纪元以来的秒数,实际上跳过了一些值。
我错过了什么?
我在 Snow Leopard 上的 X-Code 3.2.5 中的 2.4GHz 双核 Macbook Pro 上运行这些测试(也许这个问题特定于我的系统)?