![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Друзья, не смог найти на форуме ответ, поэтому пишу этот детский вопрос.
Вопрос: Как я понял в функцию sleep(); засунуть дробное значения я не в силах. Как это можно обойти? -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
profesiachuvak, дробное - это какое? Там идет время в мс., Вам нужно еще мельче?
|
|||
|
||||
| profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Да мне нужно ещё мельче.
То есть мне нужно не то чтобы мельче или больше, просто диапазон изменяемых значений у меня должен быть большим. То есть использовать задержку вплоть до сотых? Дело в том, что с помощью то или иной задержки у меня изменяет частота выдаваемая с LPT порта. И там мне необходимо много вариаций. -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
profesiachuvak, еще разок: какой диапазон и шаг изменения?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Дело в том, что винда переключает потоки и выделяет кванты времени по 10мс, так что точность 1мс не гарантируется. Пока программа владеет процом и не переключается в режим ядра, еще можно говорить о точности, но такое удовольствие длиться недолго, и по-любому происходят прерывания. Что-то более менее на точность можно получить в режиме ядра, да и то при определенных условиях.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
profesiachuvak, для такой точности ни винда ни делфи не подходят.
нужно ОС реального времени -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| profesiachuvak |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Диапазон частоты от 0 до как можно больше кГц. Шаг хотелось бы хотя бы 0.1. Неужели добиться точности меньше чем 1 мс невозможно??? Добавлено через 3 минуты и 27 секунд
Alexeis Что за режим ядра? Добавлено через 7 минут и 47 секунд
Frees Что значит ОС реального времени, и какие его представители*? -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
||||||
|
|||||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Интернет ещё не отменили: http://ru.wikipedia.org/wiki/ОСРВ -------------------- |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Нулевое кольцо, это привилегированный режим. Там можно получить исключительно высокий приоритет, так что прерывать будет разве что системный таймер. Но в принципе, на короткие промежутки времени можно вообще запретить прерывания. Где-то встречалось на просторах инета мод windows 2000 позволяющий ей работать как система реального времени. Задачи реального времени обслуживал специальный драйвер, который как раз и работал в нулевом кольце. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Из-за этого минимальный интервал времени, не приводящий к накоплению погрешности, равен 125 мс. Даже если поставить в цикле вызов Sleep(10), то уже через пару тысяч итераций набежит довольно большая погрешность. Да, в 3-ем кольце, в котором работают все обычные программы под Windows, невозможно добиться точности для временных интервалов, не кратных 125 мс.
Это сообщение отредактировал(а) source777 - 29.11.2009, 19:30 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
| profesiachuvak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 283 Регистрация: 7.11.2009 Где: Беларусь, Минск Репутация: нет Всего: 4 |
Спасибо, source777, Ваш ответ наиболее исчерпывающий. Благодарю всех, теперь вопросов стало ещё больше -------------------- Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет. |
|||
|
||||
| 1000000dollars |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 6.10.2007 Репутация: нет Всего: 8 |
Можно попробовать пошаманить с клоками процессора. Возможно удастся получить желаемую точность.
|
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Конечно не хорошо delay делать кодом, но в твоём случае может и пойдёт:
1. Встроенный asm: rdtsc 2. WinAPI: QueryPerformanceCounter и QueryPerformanceFrequency Оба способа позволяют измерять время между двумя точками в программе(с точностью до наносекунд, т.к. измеряют такты процессора), если поизвращаться, то можно использовать как "таймер", только не забудь своей программе приоритет повыше поставить, чтобы Windows не могла на другие пользовательские программы переключаться во время работы твоей. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Разве это не тики 3х мегагецового таймера? Насколько я знаю, там точность подрядка 0,5 мкс. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 4 Всего: 56 |
Честно говоря, в этот вопрос я не углублялся. Но примеры с точностью до 1 мкс где-то видел, а этого топикстартеру за глаза должно хватить... Кстати, как раз QueryPerformanceFrequency должна возвращать частоту этого таймера... у кого есть винда под рукой, проверьте какой порядок этого значения... -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |