Russian Qt Forum
Ноябрь 23, 2024, 14:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: время формирования запроса в системных тиках  (Прочитано 8017 раз)
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>

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

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 25, 2011, 07:30 »

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

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

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Август 25, 2011, 10:45 »

Стандартный приём - в начале измеряемого промежутка сохраняем значение GetTickCount(), а в конце - находим разность между текущими показаниями и временем старта.
а я думал стандартным приёмом является использование clock() Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
brankovic
Гость
« Ответ #3 : Август 25, 2011, 11:57 »

а я думал стандартным приёмом является использование clock() Улыбающийся

clock -- плохая функция. Под линуксами если несколько тредов она считает некую "сумму по тредам". Тиками процессора в ней и
 не пахнет. Я вообще предпочитаю мерить реальное время, это как-то надёжнее.
Записан
blood_shadow
Гость
« Ответ #4 : Август 25, 2011, 19:14 »

Код
C++ (Qt)
DWORD startTickCount = GetTickCount();
... // измеряемый по длительности процесс
length = GetTickCount() - startTickCount;
это в принципе подходит, а как перевести c милисекунд в тики, достаточно перевести сначала в секунды,
а потом умножить на CLOCKS_PER_SEC которая определена в <ctime>?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Август 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;
« Последнее редактирование: Август 26, 2011, 00:18 от LisandreL » Записан
brankovic
Гость
« Ответ #6 : Август 26, 2011, 00:16 »

а как перевести c милисекунд в тики, достаточно перевести сначала в секунды,
а потом умножить на CLOCKS_PER_SEC которая определена в <ctime>?

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

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Август 26, 2011, 07:52 »

Цитировать
Вы серьёзно думаете, что любой процессор выдаёт CLOCKS_PER_SEC тиков в секунду?
Вообще то это не процессор выдает тики, а системный таймер.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.