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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2008, 21:42   #1
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию Выполнение действия через промежуток времени

Привет Всем! Необходимо через определенный промежуток времени выполнять некоторые процедуры и результат выполнения отображать на экране. Подскажите пожалуйсто как это лучше сделать?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 04.01.2008, 21:56   #2
ben95
Новичок
Джуниор
 
Аватар для ben95
 
Регистрация: 22.12.2007
Сообщений: 204
По умолчанию

лутше поставить тайиер)
ben95 вне форума Ответить с цитированием
Старый 04.01.2008, 22:38   #3
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от ben95 Посмотреть сообщение
лутше поставить тайиер)
Я так и предполагал что первый ответ будет именно про таймер. В том то вся проблема что таймер меня не устраивает. Мне надо выполнить процедуру 10000 раз за секунду, или хотя бы на крайний случай 1000 раз в секунду а таймер уже при значении Timer.interval = 100 отстает от реального времени, я уж не говорю про Timer.interval = 1, разницы почти никакой.
Вложения
Тип файла: zip ProbaTime.zip (5.8 Кб, 95 просмотров)
Уже Чему-то научился Но этого мало

Последний раз редактировалось chingiz; 04.01.2008 в 22:46.
chingiz вне форума Ответить с цитированием
Старый 04.01.2008, 23:44   #4
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Ну я думаю нужно организовать цикл.Только тогда все будет наверно зависить от железа и как вы оптимизируете ваши процедуры.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 05.01.2008, 00:07   #5
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Лучше просто организовать поток и уже в нем, в цикле, постоянно выполнять определенные действия.
Есть еще функция QueryPerformanceCounter, с её помощью можно отсчитывать точные промежутки, вот только как это связать с секундами (и их долями) я не знаю.
Jeni вне форума Ответить с цитированием
Старый 05.01.2008, 10:08   #6
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от SunKnight Посмотреть сообщение
Ну я думаю нужно организовать цикл.Только тогда все будет наверно зависить от железа и как вы оптимизируете ваши процедуры.
Цикл не пойдет. Мне надо выполнить процедуру и ее результат отправить на внешнее устройство через порт, причем данную операцию нужно производить именно в заданный интервал времени, определяемый юзером. Т.е сейчас он захочет послать сигнал раз в секунду, а потом 10000 раз в секунду. Конкретно мне надо управлять шаговым двигателем, и из программы я должен управлять скоростью вращения двигателя, с паралельным показом на экране количества шагов сделанных двигателем.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 05.01.2008, 10:15   #7
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Jeni Посмотреть сообщение
Есть еще функция QueryPerformanceCounter, с её помощью можно отсчитывать точные промежутки
Что за функция и где ее искать?

Насчет потока не знаю - надо подумать.
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 05.01.2008, 12:18   #8
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от chingiz Посмотреть сообщение
Что за функция и где ее искать?
Искать её стоит в модуле Windows, а точнее в системной библиотеке kernel32.dll
Насколько я понимаю, она возвращает количество "тиков" процессора. За каждый такт микропроцессора увеличивается на единицу специальный регистр-счетчик. Вот функция и возвращает значение этого счетчика.
В принципе, зная тактовую частоту процессора и вызывая эту функцию, можно рассчитать и интервал времени, но невозможно гарантировать постоянство этого интервала, особенно при очень малых значениях.

Цитата:
Сообщение от chingiz Посмотреть сообщение
Насчет потока не знаю - надо подумать.
Поток желателен в том смысле, чтобы основное окно при таких вычислительных нагрузках "не умирало".

Последний раз редактировалось Jeni; 05.01.2008 в 12:29.
Jeni вне форума Ответить с цитированием
Старый 05.01.2008, 12:20   #9
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

chingiz - Windows не является системой реального времени и точную выдержку малых интервалов не гарантирует. Гарантировано на XP примерно 10 мс при малой нагрузке на процессор, ну 1 мс можно выжать с помощью мультимедийных таймеров и функции timeBeginPeriod, но не более, и то с погрешностью, которая зависит от загрузки процессора другими задачами. Точности менее 1 мс (1000 раз в секунду) вы не добьетесь НИКАК!
Ins вне форума Ответить с цитированием
Старый 05.01.2008, 12:37   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Посмотрите здесь:
http://www.softhelp.ru/delphi/class/...?c=exact_timer
http://www.softhelp.ru/delphi/class/...reate_mm_timer
но насчет интервалов Ins прав
_Dmitry вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение функции nikleb JavaScript, Ajax 7 10.08.2008 01:49
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени Deefrost Qt и кроссплатформенное программирование С/С++ 5 16.05.2008 20:25
Как зделать авто выполнение Editor Общие вопросы Delphi 5 27.04.2008 21:01
Выполнение действия с компонентами в цикле Ermiss Общие вопросы Delphi 4 01.11.2007 23:54
Выполнение действия в заданное время WOWan234 Помощь студентам 6 02.05.2007 01:52