требуется кросплатформенный счётчик "тиков" |
Здравствуйте, гость ( Вход | Регистрация )
требуется кросплатформенный счётчик "тиков" |
Litkevich Yuriy |
20.12.2009, 17:19
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
нужно средство для измерения относительного времени, быстрое.
У меня мысли только о неком счётчике "тиков", который, я думаю, есть в каждой ОСьке. Возможно в стандарте Си/Си++ есть что-то такое, но я со стандартными вещами в этих языках плохо знаком. Подкиньте идеи пожалуйста. |
|
|
Kagami |
20.12.2009, 17:43
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Не совсем понял проблемы. Чем обычный QTimer не подходит?
|
|
|
Litkevich Yuriy |
20.12.2009, 18:16
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Чем обычный QTimer не подходит? это довольно жирный класс, как следствие не быстрый.Но самое главное это разрешающая способность - 1 мс. => 1 МГц, частота проца (ядра) сотни/тысячи мегагерц (единицы/десятки наносекунд) Должен быть счётчик тикающий со скоростью 1/10 или 1/100 тактовой частоты ядра. Применять, например, в таком стиле: Нужно для тестовых измерений производительности.Задача не позволяет делать измерительные циклы |
|
|
BRE |
20.12.2009, 20:34
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Посмотри на исходники QTestLib, там вроде есть режим подсчета тиков процессора.
Цитата The code insde the QBENCHMARK macro will be measured, and possibly also repeated several times in order to get an accurate measurement. This depends on the selected measurement back-end. Several back-ends are available an can be selected on the command line: Имя Commmand-line Arguemnt Availability Walltime (default) All platforms CPU tick counter -tickcounter Windows, Mac OS X, Linux, many UNIX-like systems. Valgrind/Callgrind -callgrind Linux (if installed) Event Counter -eventcounter All platforms Вот отсюда: http://doc.crossplatform.ru/qt/4.5.0/qtestlib-manual.html Посмотри на файл src/testlib/3rdparty/cycle_p.h Сообщение отредактировал BRE - 20.12.2009, 21:20 |
|
|
ViGOur |
20.12.2009, 23:03
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Но так же нужно не забывать, что мы работаем не в ОС реального времени, потому тики будут точными на каждые 100 мс, на меньший промежуток времени нет. Ребята помнится уже как-то (достаточно давно) проверяли это дело на другом форуме.
И 100 мс справедливо помнится для винды, для никсов не помню проверяли или нет. |
|
|
Litkevich Yuriy |
20.12.2009, 23:50
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
trdm |
21.12.2009, 2:29
Сообщение
#7
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
потому тики будут точными на каждые 100 мс для системного (низкоуровнего) счётчика, тики будут соответствовать точности кварцевого резонатора (с соответствующим коэфф. деления).Меня не интересует ширпотребный таймер/часы. именно счётчик тиков GetTickCount ы? +
Сообщение отредактировал trdm - 21.12.2009, 2:32 |
|
|
Litkevich Yuriy |
21.12.2009, 2:42
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
GetTickCount ы? Цитата The return value is the number of milliseconds that have elapsed since the system was started. Там же нашёл, что-то похожее на то, что мне нужно: QueryPerformanceCounter И ещё QueryUnbiasedInterruptTime про который написано: Цитата Points to a variable to receive the unbiased interrupt-time count in system time units of 100 nanoseconds. Посмотри на файл src/testlib/3rdparty/cycle_p.h а вот это походу в яблочко. Буду штудировать
|
|
|
Iron Bug |
22.12.2009, 10:03
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
полгода назад тот же вопрос меня мучил. нарыла в какой-то статье реализацию счётчика, маленько переделала под свои нужны. примерно вот так вышло (выкусываю куски кода, ибо весь он сильно объёмный и там не просто счётчики, а отдельный поток с организацией дилеев реализован для моих хардварных нужд):
детали реализации счётчика под венду: это файл для счётчика под венду (идея в замерах по счётчику и периодической синхронизации его с системным временем для устранения набежавшей погрешности). взято хоть убей не помню откуда, возможно, что-то я ещё переделывала потом - уже плохо помню чего там было, но код работает:
P.S. я тут быстро из кода навыдирала кусочков и комменты маленько добавила, могла чего-нить забыть. но в общем, я думаю, идея понятна. Сообщение отредактировал Iron Bug - 22.12.2009, 10:12 |
|
|
Iron Bug |
22.12.2009, 10:03
Сообщение
#10
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
убираю копию... чота сеть глюканула - два раза послалось. сорри.
Сообщение отредактировал Iron Bug - 22.12.2009, 10:06 |
|
|
Текстовая версия | Сейчас: 21.12.2024, 15:31 |