Здравствуйте, sergey2b, Вы писали:
S>подскажите пожалуйста какой под linux есть аналог функции QueryPerformanceFrequency
По идее, реализация стандартной библиотеки реализует std::chrono::steady_clock с максимальной точностью
(ибо std::chrono::high_resolution_clock малополезен из-за негарантированного steadyness, для точных замеров используют steady_clock)
Поэтому вместо деления QueryPerformanceCounter на QueryPerformanceFrequency должно быть достаточно просто взять steady_clock для большинства случаев — это будет портабельный С++.
(Я, однако, не специалист по линуксам, знаю, что в Windows steady_clock делают именно на QPF / QPC)
O>>clock_getres / clock_gettime S>про clock_getres я знаю S>но не понял как его использовать
Она возвращает не частоту, а разрешение, просто FYI. А clock_gettime просто возвращает время. Не надо ничего потом умножать/длить, в отличии от QPF.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, ononim, Вы писали:
S>>>подскажите пожалуйста какой под linux есть аналог функции QueryPerformanceFrequency O>>clock_getres / clock_gettime
S>про clock_getres я знаю S>но не понял как его использовать
#include < stdio.h > //Для printf#include < time.h > //Для clock_getresint main (void)
{
// Структуры для сохранения разрешения часовstruct timespec res_clock;
// Переменная для расчета минимального интервала времени
// доступного для измеренияint res;
// Определяем разрешающую способность часов
clock_getres (CLOCK_REALTIME, &res_clock);
// Рассчитываем минимальный интервал времени в наносекундах
res=1000000000*res_clock.tv_sec + res_clock.tv_nsec;
// Выводим результат расчета на консоль
printf (“%d нс\n”,res);
return 0;
}
Результат:
1 нс
Здравствуйте, Pzz, Вы писали:
Pzz>В венде эта функция нужна, чтобы узнать, в каких единицах возвращает время QueryPerformanceCounter. Но зачем она тебе нужна в линухе?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Хм, на весь линух только один таймер?
При чем здесь?
Линух всегда возвращает время в секундах и микросекундах или секундах и наносекундах, и единицы измерения заранее известны и не зависят от аппаратуры или чего-нибудь еще. Поэтому их не надо выяснять во время исполнения.
Здравствуйте, sergey2b, Вы писали:
S>про clock_getres я знаю S>но не понял как его использовать
clock_getres возвращает не единицы измерения времени, я его точность. Например, время ты получаешь в секундах с наносекундами, но реальная точность, определяемая аппаратурой — одна миллисекунда. Соответственнно, более мелкие отрезки времени ты на этом устройстве напрямую не измеришь (в некоторых случаях можно измерить косвенно, например, повторить что-то миллион раз, и поделить на миллион, но, например, время между последовательно принятыми сетевыми пакетами ты так не измеришь, потому что это событие нельзя повторить).
Здравствуйте, Pzz, Вы писали:
ЕМ>>Хм, на весь линух только один таймер?
Pzz>При чем здесь?
При том, что у разных аппаратных таймеров разное разрешение. Даже если в API время возвращается в фемтосекундах, реальное разрешение таймера может быть порядка микросекунд, а то и хуже. Это может быть важно.