我目前正在重寫一些舊的代碼和跨越這來了:它是安全的存儲毫秒紀元以來UINT32
gettimeofday(&tv, NULL);
unsigned int t = tv.tv_sec * 1000 + tv.tv_usec/1000;
這確實看起來他們正試圖紀元以來的毫秒存儲在一個UINT32 。當然,我認爲這不合適,所以我做了一些測試。
#include <sys/time.h>
#include <stdint.h>
int main() {
struct timeval tv;
gettimeofday(&tv, nullptr);
uint32_t t32 = tv.tv_sec * 1000 + tv.tv_usec/1000;
int64_t t64 = tv.tv_sec * 1000 + tv.tv_usec/1000;
return 0;
}
而且我有種權:
(gdb) print t32
$1 = 1730323142
(gdb) print t64
$2 = 1423364498118
所以我想這是不是安全的,他們在做什麼。但他們在做什麼,爲什麼他們這樣做,實際發生了什麼? (在這個例子中,左邊的10位會丟失,他們只關心差異)他們仍然保持毫秒的精度嗎? (是)請注意,他們通過網絡發送此「時間戳」,並仍將其用於計算。
我想你引用的代碼試圖產生一個隨機數發生器的種子。 – 2015-02-08 03:17:46
@HotLicks不,它不是。 – noob 2015-02-08 03:18:26
(還需要回想一下'int'不一定是32位。) – 2015-02-08 03:19:18