![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Здравствуйте. timeGetTime() возвращает время в милисекундах. Можно ли увеличить точность хотя бы до 0.1 ms, т.е. узнать время в десятых долях милисекунды?
|
|||
|
||||
| PPS05 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 262 Регистрация: 6.11.2005 Где: Беларусь, Минск Репутация: 1 Всего: 7 |
Как вариант: использовать QueryPerformanceCounter (вернет значение высокоточного счетчика) и QueryPerformanceFrequency (частота). Если поделить разность значений счетчиков на частоту, получишь значение временного интервала в микросекундах. Параметры писать не стал - там тривиально LARGE_INTEGER *.
-------------------- Ушел с форума и не вернулся. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
буду не оригинальным - внешняя система+ос реального времени)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| MuForum |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
- Сделал как ты написал, но к сожалению результат не совсем устраивает... - Всё равно не совсем чутко работает. - Может можно ещё как-то увеличить точность в замерах? P.S. -> Сейчас капаю в сторону Rdtsc - Отпишусь о результате... # Добавлено: Выше показанный способ оказался эффективнее других WinApi функций:
Это сообщение отредактировал(а) MuForum - 19.11.2008, 20:51 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Можно на время замера отключить все прерывания, тогда по идее никто не сможет помешать, но винда перестанет быть многозадачной
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
конечно, таким способом можно получить время в секундах, хотя, выбрав после этого нужный делитель, можно и микросекунды извлечь. частота дискретизации счетчика зависит от мощей и уровня загруженности проца, вот он и называется performance-counter основной минус в том, что сам счетчик нестабилен, частота плавает, отсюда небольшие (а порой и большие) погрешности нужно еще учесть, что на разных процах результат будет скорее разный, чем одинаковый, поэтому во время замеров рекомендуется закреплять процесс или поток на каком-нибудь одном (если, конечно, процов несколько). -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
MuForum, в документации к DirectX SDK написано, что Rdtsc будет давать некорректные результаты, если изменится частота процессора (например, из-за Cool'n'Quite) или переноса потока на другое ядро. С первым бороться вряд ли удастся, но во избежание второго поток, в котором производится замер, лучше привязать к конкретному ядру с помощью SetProcessorAffinityMask.
Но что-то я повторяю за другими Это сообщение отредактировал(а) Kallikanzarid - 21.11.2008, 21:41 |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Ты оказался прав. - Даже не трогая ядра, на разных компьютерах разные результаты. (Конфигурация примерно одинаковая) - Так что данный вариант не годится =( -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
вы все еще не уверовали в мой вариант?) (http://forum.vingrad.ru/index.php?showtopic=198098&view=findpost&p=1427074)
значит вас плохо учили в курсе "Операционные системы".... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| allsolovey |
|
|||
![]() Empty Профиль Группа: Участник Сообщений: 29 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
Почему в Borland C 3.1 не работает GetTickCount().Компилируется а вот при запуске ошибка Undefined symbol GETTICKCOUNT in module ..cpp.Windows.h подключен.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
говоря о времени в винде надо помнить что это не ОС реального времени. в пределах последовательно квантов времени одного потока время реальное, но по истечению этих квантов поток спит неопределенное время пока снова не получит свои кванты времени
Добавлено через 1 минуту и 9 секунд гхм... некропост однако allsolovey, выкинь Borland C 3.1, и вообще - не умеешь настроить свой компилятор -не берись %) |
|||
|
||||
| allsolovey |
|
|||
![]() Empty Профиль Группа: Участник Сообщений: 29 Регистрация: 3.1.2008 Репутация: нет Всего: нет |
Я измеряю время работы функции.В билдере время выводит как надо.Что мне в Borland C 3.1 надо настроить?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Borland C 3.1 вроде досовский, а функция GetTickCount виндовая. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |