LINUX.ORG.RU

Преобразование времени


0

0

Язык С ОС Linux

Имеется две переменных типа long: в одной хранятся секунды с 1 янв 1970 года, в другой - микросекунды текущей секунды. Мне хотелось бы сделать из двух переменных одну, чтобы зафиксировать два разных её значения и посчитать разницу между ними в микросекундах.

Существует ли такая функция, которая из этих двух переменных делает одну? Если да, то какая?

Спасибо.

anonymous

long sec1, sec2, msec1, msec2; long fmsec1, fmsec2;

long delta;

fmsec1 = 1000000 * sec1 + msec1; // первое значение в микросекундах fmsec2 = 1000000 * sec2 + msec2; // второе значение в микросекундах

delta = fmsec2 - fmsec1; // разница межлу 2-мя значениями, 10^-6 c

Чем тебе не функция?

anonymous
()

long sec1, sec2, msec1, msec2;
long fmsec1, fmsec2;

long delta;

fmsec1 = 1000000 * sec1 + msec1; // первое значение в микросекундах
fmsec2 = 1000000 * sec2 + msec2; // второе значение в микросекундах

delta = fmsec2 - fmsec1; // разница межлу 2-мя значениями, 10^-6 c

Чем тебе не функция?

anonymous
()

Э-э-э

Вопрос типа:
" Имеются две переменных типа int, существует ли функция,
возвращающая их разность..."

Наверное, нет. Наверное, придется написАить нечто вроде:
struct timeval baseTime,tv;
long int t;
gettimeofday(&baseTime,NULL);
...
gettimeofday(&tv,NULL);
t= ( tv.tv_sec -baseTime.tv_sec  )*1000000
  +( tv.tv_usec-baseTime.tv_usec );

где
/usr/include/sys/time.h:

       struct timeval {
               long tv_sec;        /* seconds */
               long tv_usec;  /* microseconds */
       };

Die-Hard ★★★★★
()

стандартный timersub:
#define timersub(tvp, uvp, vvp)                                         \
        do {                                                            \
                (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;          \
                (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;       \
                if ((vvp)->tv_usec < 0) {                               \
                        (vvp)->tv_sec--;                                \
                        (vvp)->tv_usec += 1000000;                      \
                }                                                       \
        } while (0)

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