myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Библиотека mtime, Windows only | Время в миллисекундах

Теги
Нет тегов для показа
alex82
сообщение 22.3.2011, 10:19
Сообщение #1


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




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

Прикрепленный файл  mtime.rar ( 1.29 килобайт ) Кол-во скачиваний: 17
Прикрепленный файл  mtime_src.rar ( 330 байт ) Кол-во скачиваний: 12


Пример использования:
Код
require"mtime"
print( mtime.get() )




Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 22.3.2011, 22:26
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




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

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

Код
#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


Спасибо сказали:
Go to the top of the page
+Quote Post
alex82
сообщение 22.3.2011, 23:31
Сообщение #3


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Setuper

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

Кстати, можно ли получить время в микросекундах под вендой?
Go to the top of the page
+Quote Post
Invisible
сообщение 23.3.2011, 0:09
Сообщение #4


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 248
Регистрация: 14.7.2008
Из: Хабаровск
Пользователь №: 193
Спасибо сказали: 40 раз




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

PS Ссори за оффтоп.
Go to the top of the page
+Quote Post
Alexey
сообщение 23.3.2011, 2:07
Сообщение #5


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Используй хабсофт с таймерами ;)
Go to the top of the page
+Quote Post
alex82
сообщение 23.3.2011, 10:47
Сообщение #6


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




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


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 23.3.2011, 21:46
Сообщение #7


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Цитата(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;
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 23.11.2024, 5:24