Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2012, 12:40   #1
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию как добиться точных промежутков времени?

Ребят задача такая, нужно чтобы некое действие выполнилось несколько раз но с большой точностью по времени. то есть например есть такая последовательность в коде:
Код:
Image1.Visible:= true;
sleep(300);
Image1.Visible:= False;
sleep(400);
Image1.Visible:= true;
sleep(500);
Image1.Visible:= False;
Но Sleep (и другие виды пауз) всеравно дают погрешность и если таких "миганий" например очень много то эти погрешности в итоге складываются. У меня появилась мысль создать звуковую дорожку и когда она играется отлавливать определенные сэмплы и делать соответствующие действия... такое вообще возможно? Есть мысли по этому поводу?
JekaDefer вне форума Ответить с цитированием
Старый 09.07.2012, 13:29   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Попробуй waitable timer.
А это зачем вообще? "Image1.Visible" и "большая точность" - несколько далёкие друг от труга понятия...
Somebody вне форума Ответить с цитированием
Старый 09.07.2012, 13:31   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Можно установить приоритет SetPriorityClass в REALTIME_PRIORITY_CLASS, в противном случае никто не может гарантировать точных замеров времени.
Arigato вне форума Ответить с цитированием
Старый 09.07.2012, 13:37   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Вообще и при REALTIME_PRIORITY_CLASS никто не может гарантировать, это же не настоящий realtime.
Somebody вне форума Ответить с цитированием
Старый 09.07.2012, 14:19   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Somebody, тоесть приоритеты операций придумали от балды? Тс, выставьте как сказал Arigato, и вырубите все ресурсо-жрущие программы.
Человек_Борща вне форума Ответить с цитированием
Старый 09.07.2012, 14:38   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Человек_Борща, архитектура винды не забивает на устройства, то есть они прерывают выполнение все равно.
да и есть еще вещи.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.07.2012, 12:01   #7
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Вопервых, нужно отказаться от использования GDI и VCL, только winapi! Нужен DirectX или OpenGL работающие в железном(не software) режиме с выключенной вертикальной синхронизацией.

Вовторых, нужно использовать высокоточные таймеры и корректировку! Хорошая альтернатива для sleep это nanosleep.

Втретьих, если требуется просто "невероятная" точность, то нужно чтобы программа работала c наивысшим приоритетом и ожидания нужно реализовывать самостоятельно. QueryPerformanceCounter & QueryPerformanceFrequency. Но есть опасность того, но на ноутбуках, при переходе в энергосберегающий режим частота процессора падает. Поэтому нужен четкий контроль с использованием дополнительных функций, которые не зависят от частоты процессора это GetTickCount или timegettime (будет поточнее GetTickCount) и еще нужно учесть переполнения переменных!

В общем задача эта не из простых!

Последний раз редактировалось Kostia; 20.07.2012 в 12:39.
Kostia вне форума Ответить с цитированием
Старый 20.07.2012, 12:21   #8
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Если нужно очень точно, тогда следует отказаться от венды в целом. Возможно даже от x86 архитектуры.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от промежутков между div'ами? kreaton HTML и CSS 13 10.12.2011 18:46
Существует ли такой компонент или как этого добиться Arkuz Общие вопросы Delphi 2 01.12.2011 15:53
Освещение в OpenGL - как добиться релистичности, нужен мануал. Karp_13 Общие вопросы C/C++ 4 29.10.2011 00:29
Параллельное скачивание или как добиться скачивания сразу двух файлов fezilk25 Работа с сетью в Delphi 5 07.02.2011 22:22
Как добиться, чтобы хук был постоянно включен? пауэрлифтинг Win Api 2 25.01.2010 22:34