Таймер высокого разрешения с C ++ и Linux? - PullRequest
46 голосов
/ 11 февраля 2009

В Windows есть несколько удобных функций, таких как QueryPerformanceCounter из mmsystem.h для создания таймера высокого разрешения. Есть ли что-то похожее для Linux?

Ответы [ 6 ]

32 голосов
/ 11 февраля 2009

Здесь уже спрашивали - но в основном есть функция boost ptime, которую вы можете использовать, или функция POSIX clock_gettime (), которая может служить в основном той же цели.

30 голосов
/ 11 февраля 2009

Для Linux (и BSD) вы хотите использовать clock_gettime () .

#include <sys/time.h>

int main()
{
   timespec ts;
   // clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD
   clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux
}

См .: Этот ответ для получения дополнительной информации

8 голосов
/ 21 января 2011

Вот ссылка, описывающая, как выполнить синхронизацию с высоким разрешением в Linux и Windows ... и нет, не используйте RTSC.

https://web.archive.org/web/20160330004242/http://tdistler.com/2010/06/27/high-performance-timing-on-linux-windows

3 голосов
/ 17 августа 2016

С C ++ 11 используйте std::chrono::high_resolution_clock.

Пример:

#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;

int main()
{
    auto t1 = Clock::now();
    auto t2 = Clock::now();
    std::cout << "Delta t2-t1: " 
              << std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
              << " nanoseconds" << std::endl;
}

Выход:

Delta t2-t1: 131 nanoseconds
1 голос
/ 05 июля 2011

За мои деньги нет более удобного кроссплатформенного таймера, чем класс Qt QTime .

1 голос
/ 11 февраля 2009

У меня ничего нет, кроме этой ссылки: http://www.mjmwired.net/kernel/Documentation/rtc.txt

Я почти уверен, что RTC - это то, что вы ищете.

EDIT

Другие ответы кажутся более переносимыми, чем мои.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...