0

私は次の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 番目の「部分」が得られる限り、すべて問題ありません。

4

2 に答える 2