2016-11-21 2 views
-2

Поскольку chrono не поддерживается в инструменте Network Simulator -3, мне нужно закодировать на C++, не используя хроно, чтобы получить отметку времени в наносекундах.Как получить текущую временную метку в наносекундах на 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 нс. –

Смежные вопросы