Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Дополнительные библиотеки для PtokaX _ Библиотека mtime

Автор: alex82 22.3.2011, 10:19

Написал небольшую библиотеку, позволяющую получать время с момента запуска системы в миллисекундах. Библиотека может быть полезна для оценки производительности кода.

 mtime.rar ( 1.29 килобайт ) : 17
 mtime_src.rar ( 330 байт ) : 12


Пример использования:

Код
require"mtime"
print( mtime.get() )



Автор: Setuper 22.3.2011, 22:26

не кроссплатформенно

Вот код функции для линукса:

Код
#ifndef _WIN32
#include <sys/time.h>
unsigned long GetTickCount() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
}
#endif // _WIN32

Автор: alex82 22.3.2011, 23:31

Setuper

Если уж делать кроссплатформенно, то нужно округлить tv.tv_usec / 1000

Кстати, можно ли получить время в микросекундах под вендой?

Автор: Invisible 23.3.2011, 0:09

Уважаемые alex82 и Setuper. Сможете сделать либу для создания таймера для Lua ? Или это невозможно ?

PS Ссори за оффтоп.

Автор: Alexey 23.3.2011, 2:07

Используй хабсофт с таймерами ;)

Автор: alex82 23.3.2011, 10:47

...или Lua-AIO с wxLua. Или тот же Lua-AIO с созданием ветви и использованием ThreadWait()

Автор: Setuper 23.3.2011, 21:46

Цитата(alex82 @ 22.3.2011, 23:31) *
Setuper

Если уж делать кроссплатформенно, то нужно округлить tv.tv_usec / 1000

Кстати, можно ли получить время в микросекундах под вендой?


Зачем округлять? Какой смысл несёт округление?


Чтобы получить время в микросекундах под виндой можно написать аналог линуксовой функции gettimeofday:

Код
#include <time.h>

void gettimeofday(struct timeval * tv, struct timezone *) {
  union {
    FILETIME ft;
    unsigned __int64 ns100;
  } now;
  GetSystemTimeAsFileTime(&now.ft);
  //116444736000000000 = (24 * 3600) * ((1970 - 1601) * 365 + 89) * (1000000000 / 100)
  tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);
  tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
}

struct timeval tv;
gettimeofday(&tv, NULL);

std::cout << tv.tv_usec << std:endl;