私は次のCコードを持っています:
uint64_t combine(uint32_t const sec, uint32_t const usec){
return (uint64_t) sec << 32 | usec;
};
uint64_t now3(){
struct timeval tv;
gettimeofday(&tv, NULL);
return combine((uint32_t) tv.tv_sec, (uint32_t) tv.tv_usec);
}
これは、32ビットのタイムスタンプと32ビットの「何か」、おそらくマイクロ/ナノ秒を単一の64ビット整数に結合します。
C++11 chrono で書き直すのは本当に苦労しました。
これは私がこれまで行ってきたことですが、これは間違った方法だと思います。
auto tse = std::chrono::system_clock::now().time_since_epoch();
auto dur = std::chrono::duration_cast<std::chrono::nanoseconds>( tse ).count();
uint64_t time = static_cast<uint64_t>( dur );
重要な注意- 最初の 32 ビットが「有効な」タイムスタンプであることだけを気にします。
2 番目の 32 ビットの「部分」は、ナノ秒またはマイクロ秒のいずれでもかまいません。この関数を 2 回連続して呼び出すと、異なる 2 番目の「部分」が得られる限り、すべて問題ありません。