LINUX.ORG.RU

вычислить время на сях


0

0

Пытаюсь вычислить время исполнения программой некоторого участка кода в милисекундах.

struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
long int time1 = now.tv_nsec/1000000;
...

clock_gettime(CLOCK_REALTIME, &now);
long int time2 = now.tv_nsec/1000000;
std::cout << (time2-time1) << ' ' << std::flush;

вижу отрицательно время

-342 -455 ...

Что не так?

P.S. хотя в time.h tv_nsec типа long int, кроме того без деления на мильён тоже чиcла тоже негативные.

/* POSIX.1b structure for a time value. This is like a `struct timeval' but has nanoseconds instead of microseconds. */
//struct timespec
// {
// __time_t tv_sec; /* Seconds. */
// long int tv_nsec; /* Nanoseconds. */
// };


:w





 32 /* Parameters used to convert the timespec values: */
 33 #define MSEC_PER_SEC    1000L
 34 #define USEC_PER_MSEC   1000L
 35 #define NSEC_PER_USEC   1000L
 36 #define NSEC_PER_MSEC   1000000L
 37 #define USEC_PER_SEC    1000000L
 38 #define NSEC_PER_SEC    1000000000L
 39 #define FSEC_PER_SEC    1000000000000000L

почему-то буковка L стоит, может тебе тоже её поставить?

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

на сях с плюсами программа в целом. Но, нашел я средство в time.h.

tmfd
() автор топика
Ответ на: комментарий от dimon555

> почему-то буковка L стоит, может тебе тоже её поставить?
L чтобы компилятор константу к long преобразовал. Убрал вообще деление, какая-то фигня:
[t1 t2 t2-t1]
[804728731 357253132 -447475599]
[358924250 899472634 540548384]

tmfd
() автор топика

уныло, уныло товарищи

незнаю что за функция clock_gettime но уверен что она возвращает в вышеозначенную структуру два разных числа и надо вычитать не только поле tv_nsec ео и tv_sec, тоесть tv_sec увеличилось, а tv_nsec могло и уменьшится ... как-то так ...

(t2.tv_sec - t1.tv_sec) * 1000L + (t2.tv_nsec - t1.tv_nsec) * 1000000L

ЗЫ: зря все-таки анонимусов запретили, они бы уж точно правильно сказали

PIn
()
Ответ на: комментарий от mky

да, делить конечноже, ошибся я

ЗЫ: говорю же анонимусы бы правильно сказали, нам регистратам непотянуть

PIn
()

namespace Time
{
const long NSEC_PER_SEC = 1000000000L;
const long NSEC_PER_MSEC = 1000000L;
const long MSEC_PER_SEC = 1000L;
}; // namespace Time

inline timespec operator+(const timespec &ts1, const timespec &ts2)
{
timespec result;

result.tv_sec = ts1.tv_sec + ts2.tv_sec;
result.tv_nsec = ts1.tv_nsec + ts2.tv_nsec;
if (result.tv_nsec >= Time::NSEC_PER_SEC)
{
result.tv_sec++;
result.tv_nsec -= Time::NSEC_PER_SEC;
}

return result;
}

inline timespec operator-(const timespec &ts1, const timespec &ts2)
{
timespec result;

result.tv_sec = ts1.tv_sec - ts2.tv_sec;
if (ts1.tv_nsec < ts2.tv_nsec)
{
result.tv_sec--;
result.tv_nsec = Time::NSEC_PER_SEC - (ts2.tv_nsec - ts1.tv_nsec);
}
else
result.tv_nsec = ts1.tv_nsec - ts2.tv_nsec;

return result;
}

Devix
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.