Доброго времени суток...
Собственно вопрос - как в Linux, используя только возможности языка C засечь промежуток времени с точностью до миллисекунд?
Пробовал
clock_t before = clock();
/* тут код */
clock_t after = clock();
fprintf("%u", after - before), но на этом участке он выдает либо 0 (мало итераций в цикле, время которого замеряется),
либо прога падает с SEGFAULT...
[решено] [C] Как засечь промежуток времени с точностью до миллисекунд?
Модератор: Модераторы разделов
-
- Сообщения: 183
- ОС: win 7, Kubuntu 10.10
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: [решено] [C] Как засечь промежуток времени с точностью до миллисекунд?
Отрываю от сердца Работает и под виндой, и под Linux:
Пользоваться так:
В tm будет время выполнения операции в микросекундах. Переделать под миллисекунды, думаю, несложно.
PS может могут быть проблемы при переходе через границу суток в Linux, было некритично - не проверял сей факт.
Код: Выделить всё
#pragma once
#ifndef TIMER_HR_H
#define TIMER_HR_H
#ifdef _WIN32
// Windows time query
#include <windows.h>
inline long long gettimeus()
{
static LARGE_INTEGER ClockPerSecond = { 0 };
if( ClockPerSecond.QuadPart == 0 ) QueryPerformanceFrequency( &ClockPerSecond );
LARGE_INTEGER li;
QueryPerformanceCounter( &li );
return li.QuadPart * 1000000LL / ClockPerSecond.QuadPart;
}
#else // _WIN32
// UNIX time query
#include <sys/time.h>
inline long long gettimeus()
{
struct timeval tv;
gettimeofday( &tv, NULL );
return (long long) tv.tv_sec * 1000000LL + (long long) tv.tv_usec;
}
#endif // _WIN32
#endif // TIMER_HR_H
Пользоваться так:
Код: Выделить всё
long long tm = -gettimeus();
// операция, требующая измерения;
tm += gettimeus();
В tm будет время выполнения операции в микросекундах. Переделать под миллисекунды, думаю, несложно.
PS может могут быть проблемы при переходе через границу суток в Linux, было некритично - не проверял сей факт.
Спасибо сказали:
-
- Сообщения: 183
- ОС: win 7, Kubuntu 10.10
Re: [решено] [C] Как засечь промежуток времени с точностью до миллисекунд?
Спасибо большое...