|
|
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А можно просто сделать штамп времени и не придумывать оправдания, почему он не нужен ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 17:48 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Ты не понял Операция может занимать 14 мс Но такой замер времени покажет 0 Более точную относительную величину времени выполнения (можно получить через QueryPerformance...), это никаких проблем не составляет. Проблема возникает при попытке опереться на абсолютные времена, тут возникает планировщик задач винды и еще куча факторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 17:52 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, У тебя каша в голове Абсолютные времена, не абсолютные времена Я про одно говорю Ты про другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 18:26 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Проблема началась тогда, когда я стал замерять дельту времени с помощью этого штампа. Оказалось, метод имеет такую же погрешность как и GetTickCount - в районе 15мс. У GetTickCount погрешность 15 мс - постоянная. А у функций запроса времени - зависит от текущего разрешения системного таймера. Если выставить разрешение в 1 мс, то будет значительно точнее. Я решил делать QueryPerformanceCounter с UTC-инкрементом QueryPerformanceCounter намного "тяжелее", в десятки раз дольше работает, по сравнению с GetTickCount. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 18:45 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU У тебя каша в голове Ну ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 18:49 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
пару недель тому столкнулся с похожим вопросом, пришел в итоге к Код: pascal 1. 2. 3. 4. 5. точность 2-4 мс, зависит от нагрузки. Мне хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:11 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Старт пост о штампе времени Какой это штамп времени, если там погрешность 15мск Порнография ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:13 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Vizit0r, У timeGetTime тоже плавающее разрешение. NtQueryTimerResolutionProc позволяет узнать допустимый диапазон и текущее значение. По дефолту - 15мсек. Некоторые версии дельфей вызывали timeBeginPeriod(1), поэтому если тестируешь на машине с такой версией, получишь разрешение в 1мсек, а на машине юзера всё может быть совсем не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:26 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
У меня такой вариант. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:31 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Vizit0r, У timeGetTime тоже плавающее разрешение. NtQueryTimerResolutionProc позволяет узнать допустимый диапазон и текущее значение. По дефолту - 15мсек. Некоторые версии дельфей вызывали timeBeginPeriod(1), поэтому если тестируешь на машине с такой версией, получишь разрешение в 1мсек, а на машине юзера всё может быть совсем не так. ну, у полудесятков тестеров оказалась примерно такая же точность, поэтому я и не стал заморачиваться дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:34 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Некоторые версии дельфей вызывали timeBeginPeriod(1) До 10.3, если быть точным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 19:43 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Вывод: ставим timeBeginPeriod(1) и не паримся :) Главное вернуть при выходе из программы. Никто никогда этого трюка не заметит. На производительность компьютера практически не влияет. У большинства юзеров, у который на компе стоят несколько программ, оно итак уже выставлено в "1". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 21:28 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Kazantsev Alexey Некоторые версии дельфей вызывали timeBeginPeriod(1) До 10.3, если быть точным. Вчера только купил новый комп, поставил Windows 10 Pro, D2007, новый эйдж, его кое-чего по мелочи. Сейчас проверил - D2007 при запуске выставляет разрешение таймера в 1, а после закрытия восстанавливает. Брайзер эйдж периодически изменяет разрешение - то 1, то 16, видимо в зависимости от решаемых задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2020, 22:40 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
DmSer Вывод: ставим timeBeginPeriod(1) и не паримся :) Главное вернуть при выходе из программы. Никто никогда этого трюка не заметит. На производительность компьютера практически не влияет. У большинства юзеров, у который на компе стоят несколько программ, оно итак уже выставлено в "1". Это ж ОС-глобальная шняга? А если потом запустится прога, которая вызовет timeBeginPeriod(10000)? upd Ладно, МС предусмотрели этот случай, и берется минимум из всех заданных. Тогда сойдет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2020, 11:59 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
DmSer Вывод: ставим timeBeginPeriod(1) и не паримся :) Главное вернуть при выходе из программы. МС не рекомендует так делать. Fr0sT-Brutal А если потом запустится прога, которая вызовет timeBeginPeriod(10000)? Больше допустимого максимума (NtQueryTimerResolution) установить не получится. У меня на машине максимум ~15мсек., минимум 0.5 мсек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2020, 12:43 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey DmSer Вывод: ставим timeBeginPeriod(1) и не паримся :) Главное вернуть при выходе из программы. МС не рекомендует так делать. Но сама неоднократно так делала. Почему для нас это прокатит: 1) мы разрабатываем в основном ПО для бизнеса; 2) нам нет смысла экономить пару процентов производительности компьютера клиента, которые никто не заметит; 3) скорее всего у клиента разрешение уже выставлено в 1, поскольку масса программ так делает. 4) разрешение в 1 мс даёт преимущества нашим программам, повышает точность логгирования времени, повышает точность работы циклов ожидания, основанных на Sleep(N) (где N меньше 16), в результате чего может улучшиться производительность (такие циклы есть в FastMM4, TMonitor.Enter). 5) ухудшение производительности затрагивает только системный планировщик, но это его проблемы, на наши программы негативно почти не влияет. Конечно, если доступно только одно ядро CPU, то может влиять существенно, но таких машин сейчас нет, а если есть, то на них доживает свой век WinXP. Конечно, учащение срабатывания планировщика приводит к тому, что батарея ноутбука быстрее сядет, но это всего пара процентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2020, 18:20 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
DmSer, Это затрагивает не только планировщик: https://www.sql.ru/forum/1269119/pri-zapuske-delphi-umenshaetsya-vremya-otobrazheniya-vsplyvaushhego-menu-v-excell В общем, если есть возможность так не делать, лучше не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2020, 18:36 |
|
||
|
Адекватный способ получить штамп времени
|
|||
|---|---|---|---|
|
#18+
Хочу поблагодарить всех за участие Сейчас потестил под виндой и posix. Вроде всё норм Для винды реализовал через QueryPerformanceCounter с инкрементом UTC. Перевод в Int64 заинлайнил на Си Формат штампа решил сделать до микросекунд. Точность как на TStopwatch, только добавляется дата, работает в легаси и не тащит тяжёлые модули типа Classes, Variants Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: sql 1. 2. Кому интересно - постараюсь в течение месяца подготовить релиз, можно будет юзать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2020, 23:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40014023&tid=2037884]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 479ms |

| 0 / 0 |
