Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция Sleep(); 
V
    Опции темы
profesiachuvak
Дата 25.11.2009, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Друзья, не смог найти на форуме ответ, поэтому пишу этот детский вопрос. 

Вопрос:

Как я понял в функцию sleep(); засунуть дробное значения я не в силах. Как это можно обойти? 


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Keeper89
Дата 25.11.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



profesiachuvak, дробное - это какое? Там идет время в мс., Вам нужно еще мельче?


--------------------
PM MAIL WWW   Вверх
profesiachuvak
Дата 25.11.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Да мне нужно ещё мельче.

То есть мне нужно не то чтобы мельче или больше, просто диапазон изменяемых значений у меня должен быть большим. То есть использовать задержку вплоть до сотых?   Дело в том, что с помощью то или иной задержки у меня изменяет частота выдаваемая с LPT порта. И там мне необходимо много вариаций.


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Keeper89
Дата 26.11.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



profesiachuvak, еще разок: какой диапазон и шаг изменения?


--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 26.11.2009, 00:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Дело в том, что винда переключает потоки и выделяет кванты времени по 10мс, так что точность 1мс не гарантируется. Пока программа владеет процом и не переключается в режим ядра, еще можно говорить о точности, но такое удовольствие длиться недолго, и по-любому происходят прерывания. Что-то более менее на точность можно получить в режиме ядра, да и то при определенных условиях. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Frees
Дата 26.11.2009, 08:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



profesiachuvak, для такой точности ни винда ни делфи не подходят.
нужно ОС реального времени


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
profesiachuvak
Дата 29.11.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Цитата(Keeper89 @ 26.11.2009,  00:02)
profesiachuvak, еще разок: какой диапазон и шаг изменения?

Диапазон частоты от 0 до как можно больше кГц. Шаг хотелось бы хотя бы 0.1.

Неужели добиться точности меньше чем 1 мс невозможно???

Добавлено через 3 минуты и 27 секунд
Цитата(Alexeis @ 26.11.2009,  00:51)
Дело в том, что винда переключает потоки и выделяет кванты времени по 10мс, так что точность 1мс не гарантируется. Пока программа владеет процом и не переключается в режим ядра, еще можно говорить о точности, но такое удовольствие длиться недолго, и по-любому происходят прерывания. Что-то более менее на точность можно получить в режиме ядра, да и то при определенных условиях.

Alexeis Что за режим ядра?

Добавлено через 7 минут и 47 секунд
Цитата(Frees @ 26.11.2009,  08:19)
profesiachuvak, для такой точности ни винда ни делфи не подходят.
нужно ОС реального времени

Frees Что значит ОС реального времени, и какие его представители*?


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Демо
Дата 29.11.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(profesiachuvak @  29.11.2009,  16:01 Найти цитируемый пост)
Frees Что значит ОС реального времени, и какие его представители*?


Интернет ещё не отменили: http://ru.wikipedia.org/wiki/ОСРВ


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 29.11.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(profesiachuvak @  29.11.2009,  15:01 Найти цитируемый пост)
Alexeis Что за режим ядра?

Нулевое кольцо, это привилегированный режим. Там можно получить исключительно высокий приоритет, так что прерывать будет разве что системный таймер. Но в принципе, на короткие промежутки времени можно вообще запретить прерывания. Где-то встречалось на просторах инета мод windows 2000 позволяющий ей работать как система реального времени. Задачи реального времени обслуживал специальный драйвер, который как раз и работал в нулевом кольце.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
source777
Дата 29.11.2009, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(Alexeis @  26.11.2009,  00:51 Найти цитируемый пост)
 Дело в том, что винда переключает потоки и выделяет кванты времени по 10мс, так что точность 1мс не гарантируется.

 smile, только маленькая поправочка не 10 мс, а 1/64 секунды, т.е. 15.625 мс, можно сказать компьютерная терция. 
Из-за этого минимальный интервал времени, не приводящий к накоплению погрешности, равен 125 мс.
Даже если поставить в цикле вызов Sleep(10), то уже через пару тысяч итераций набежит довольно большая погрешность.

Цитата(profesiachuvak @  29.11.2009,  16:01 Найти цитируемый пост)
Неужели добиться точности меньше чем 1 мс невозможно???

Да, в 3-ем кольце, в котором работают все обычные программы под Windows, невозможно добиться точности для временных интервалов, не кратных 125 мс.

Цитата(profesiachuvak @  29.11.2009,  16:01 Найти цитируемый пост)
Что значит ОС реального времени, и какие его представители*? 
Самый известный представитель - это определённо QNX.


Это сообщение отредактировал(а) source777 - 29.11.2009, 19:30


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
profesiachuvak
Дата 29.11.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: нет
Всего: 4



Цитата(source777 @ 29.11.2009,  19:28)
Цитата(profesiachuvak @  29.11.2009,  16:01 Найти цитируемый пост)
Неужели добиться точности меньше чем 1 мс невозможно???

Да, в 3-ем кольце, в котором работают все обычные программы под Windows, невозможно добиться точности для временных интервалов, не кратных 125 мс.

Цитата(profesiachuvak @  29.11.2009,  16:01 Найти цитируемый пост)
Что значит ОС реального времени, и какие его представители*? 
Самый известный представитель - это определённо QNX.

Спасибо, source777, Ваш ответ наиболее исчерпывающий.  Благодарю всех, теперь вопросов стало ещё больше smile  smile 


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
1000000dollars
Дата 30.11.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

Репутация: нет
Всего: 8



Можно попробовать пошаманить с клоками процессора. Возможно удастся получить желаемую точность.


Код

VAR
 Timer : PACKED RECORD
          Lo:Cardinal;
          Hi:Cardinal;
         END;


PROCEDURE GetCLKCPU;
ASM
   dw 310Fh
   mov Timer.Lo, eax
   mov Timer.Hi, edx
END;


PM MAIL   Вверх
source777
Дата 30.11.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Конечно не хорошо delay делать кодом, но в твоём случае может и пойдёт:
1. Встроенный asm: rdtsc
2. WinAPI: QueryPerformanceCounter и QueryPerformanceFrequency

Оба способа позволяют измерять время между двумя точками в программе(с точностью до наносекунд, т.к. измеряют такты процессора), если поизвращаться, то можно использовать как "таймер", только не забудь своей программе приоритет повыше поставить, чтобы Windows не могла на другие пользовательские программы переключаться во время работы твоей.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Alexeis
Дата 30.11.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(source777 @  30.11.2009,  11:30 Найти цитируемый пост)
(с точностью до наносекунд, т.к. измеряют такты процессора), е

Разве это не тики 3х мегагецового таймера? Насколько я знаю, там точность подрядка 0,5 мкс.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
source777
Дата 30.11.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата(Alexeis @  30.11.2009,  14:31 Найти цитируемый пост)
Разве это не тики 3х мегагецового таймера? Насколько я знаю, там точность подрядка 0,5 мкс. 

Честно говоря, в этот вопрос я не углублялся. Но примеры с точностью до 1 мкс где-то видел, а этого топикстартеру за глаза должно хватить... 
Кстати, как раз QueryPerformanceFrequency должна возвращать частоту этого таймера... у кого есть винда под рукой, проверьте какой порядок этого значения...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.