Как получить текущую метку времени в наносекундах в C++ без использования хронографа?

Поскольку chrono не поддерживается в инструменте Network Simulator -3, мне нужно кодировать на C++ без использования chrono, чтобы получить метку времени в наносекундах.

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;
Другие вопросы по тегам