2016-11-21 97 views
-2

由於Chrono在網絡模擬器-3工具中不受支持,因此我需要使用C++進行編碼,而不使用計時器以獲取納秒級時間戳。如何在不使用chrono的情況下以C++語言在納秒中獲取當前時間戳?

+4

無法回答的問題沒有目標操作系統。無論操作系統如何,在低於微秒的時間內獲得好時間都非常困難。 – user4581301

+1

答案是用chrono;如果你不能;調整你的情況,直到你可以。計時。 –

+0

我需要獲取UTCTime秒數的小數部分。我正在尋找一種方法來做到這一點。有人可以建議它! –

回答

1

在Ubuntu 64,我使用POSIX

uint64_t MNS::getSystemNanosecond(void) 
{ 
    const uint64_t NSPS = 1000000000; 

    //struct timespec { __time_t tv_sec; long int tv_nsec; }; -- total 8 bytes 
    struct timespec ts; 

    // CLOCK_REALTIME - system wide real time clock 
    int status = clock_gettime(CLOCK_REALTIME, &ts); 
    dtbAssert(0 == status); 

    // to 8 byte  from 4 byte 
    uint64_t uli_nsec = static_cast<uint64_t>(ts.tv_nsec); 
    uint64_t uli_sec = static_cast<uint64_t>(ts.tv_sec); 

    uint64_t total_ns = uli_nsec + (uli_sec * NSPS); 

    return(total_ns); 
} 

用法:

uint64_t startNS = MNS::getSystemNanosecond() 

//... do stuff that takes time 

uint64_t durationNS = MNS::getSystemNanosecond() - startNS; 
+0

在我的舊桌面上,POSIX api「clock_gettime(CLOCK_REALTIME,&ts)」的持續時間約爲1600 ns。 –

相關問題