Russian Qt Forum

Программирование => Общий => Тема начата: blood_shadow от Август 24, 2011, 23:16



Название: время формирования запроса в системных тиках
Отправлено: blood_shadow от Август 24, 2011, 23:16
Стоит в задании строчка что нужно записывать в структуру - "время формирования запроса в системных тиках"
порылся в интернете все толкают ф-цию GetTickCount() - но она возвращает время которое прошло от старта программы
до настоящего момента в милисекундах:
Код:
GetTickCount Function
Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.

тогда помойму лучше использовать ф-цию clock() из <time.h>

Но тревожит другой вопрос, а не означает случайно что "время формирования запроса в системных тиках"
это абсолютное значение времени, а не относительно старта программы?


Название: Re: время формирования запроса в системных тиках
Отправлено: LisandreL от Август 25, 2011, 07:30
Стандартный приём - в начале измеряемого промежутка сохраняем значение GetTickCount(), а в конце - находим разность между текущими показаниями и временем старта.
Т.е.
Код
C++ (Qt)
DWORD startTickCount = GetTickCount();
... // измеряемый по длительности процесс
length = GetTickCount() - startTickCount;
Впрочем для измерения в миллисекундах можно использовать QDateTime::currentMSecsSinceEpoch в точно таком же ключе. Ну или QDateTime::msecsTo.

Цитировать
Но тревожит другой вопрос, а не означает случайно что "время формирования запроса в системных тиках"
Это вам лчше уточнить у дававшего задание.


Название: Re: время формирования запроса в системных тиках
Отправлено: kambala от Август 25, 2011, 10:45
Стандартный приём - в начале измеряемого промежутка сохраняем значение GetTickCount(), а в конце - находим разность между текущими показаниями и временем старта.
а я думал стандартным приёмом является использование clock() :)


Название: Re: время формирования запроса в системных тиках
Отправлено: brankovic от Август 25, 2011, 11:57
а я думал стандартным приёмом является использование clock() :)

clock -- плохая функция. Под линуксами если несколько тредов она считает некую "сумму по тредам". Тиками процессора в ней и
 не пахнет. Я вообще предпочитаю мерить реальное время, это как-то надёжнее.


Название: Re: время формирования запроса в системных тиках
Отправлено: blood_shadow от Август 25, 2011, 19:14
Код
C++ (Qt)
DWORD startTickCount = GetTickCount();
... // измеряемый по длительности процесс
length = GetTickCount() - startTickCount;
это в принципе подходит, а как перевести c милисекунд в тики, достаточно перевести сначала в секунды,
а потом умножить на CLOCKS_PER_SEC которая определена в <ctime>?


Название: Re: время формирования запроса в системных тиках
Отправлено: LisandreL от Август 26, 2011, 00:02
а потом умножить на CLOCKS_PER_SEC которая определена в <ctime>?
Цитата: time.h
/*
 * Number of clock ticks per second. A clock tick is the unit by which
 * processor time is measured and is returned by 'clock'.
 */
#define   CLOCKS_PER_SEC   ((clock_t)1000)
Тысяча в секунду - это… это… внезапно миллисекунда. Никакого перевода не нужно.

P.S. но если уж нет желания полагаться на то, что в вашем компиляторе CLOCKS_PER_SEC == 1000, то можно:
Код
C++ (Qt)
QDateTime startTime( QDateTime::currentDateTime() );
doSomeLongRoutine();
clocks = startTime.msecsTo( QDateTime::currentDateTime() ) / 1000.0 * CLOCKS_PER_SEC;


Название: Re: время формирования запроса в системных тиках
Отправлено: brankovic от Август 26, 2011, 00:16
а как перевести c милисекунд в тики, достаточно перевести сначала в секунды,
а потом умножить на CLOCKS_PER_SEC которая определена в <ctime>?

да не переведёте вы ни в какие тики. Вы серьёзно думаете, что любой процессор выдаёт CLOCKS_PER_SEC тиков в секунду? У них разная тактовая частота вообще-то. Не может константа записанная в файле быть верной для любого процессора. Уж если прямо упёрлись эти тики (задание у вас и так примут скорее всего, но допустим из принципа), то читайте про QueryPerformanceCounter.


Название: Re: время формирования запроса в системных тиках
Отправлено: kuzulis от Август 26, 2011, 07:52
Цитировать
Вы серьёзно думаете, что любой процессор выдаёт CLOCKS_PER_SEC тиков в секунду?
Вообще то это не процессор выдает тики, а системный таймер.