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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2009, 20:14   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Таймер независяший от частоты проца (Delphi)

Здраствуйте, я понимаю что про таймеры было создано много тем но ответа вних на мою проблему я пока не нашёл...

Подскажите плз код точного ну или приблизитлеьно точного таймера не зависяшего от тактовой частоты проца, ну или хотябы который будит подстраиватся под эту частоту, обычный компоменнт TTimer неустраивает, т.к. указаное на моём компе время в 10 сек на другом компе пролетело за одну!

Есть мног овариантов с вычислением тактовой частоты и тд но какой самый оптимальный прошу помоши...
Заранее благодарен.
Dozent вне форума Ответить с цитированием
Старый 15.09.2009, 20:22   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
TTimer неустраивает, т.к. указаное на моём компе время в 10 сек на другом компе пролетело за одну!
Такого не может быть. Скорее всего в Interval Вы задали 10. А нужно 10000, так как значение в миллисекундах.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 15.09.2009, 20:27   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Dozent Посмотреть сообщение
Здраствуйте, я понимаю что про таймеры было создано много тем но ответа вних на мою проблему я пока не нашёл...

Подскажите плз код точного ну или приблизитлеьно точного таймера не зависяшего от тактовой частоты проца, ну или хотябы который будит подстраиватся под эту частоту, обычный компоменнт TTimer неустраивает, т.к. указаное на моём компе время в 10 сек на другом компе пролетело за одну!

Есть мног овариантов с вычислением тактовой частоты и тд но какой самый оптимальный прошу помоши...
Заранее благодарен.
Могу предположить, что если возникает подобный вопрос, то скорее всего выхода два:
1. Вы расскажите для чего оно вам надо вообще ?
2. Вообще убрать таймер, и решить по другому пути

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

За свою практику, не видел задачи, чтобы такое понадобилось.

p.s. для информации, "стандартный компонент TTimer" - есть оболочка системы, т.е. HWND (окно) + SetTimer/KillTimer + WM_TIMER

Последний раз редактировалось BOBAH13; 15.09.2009 в 20:30.
BOBAH13 вне форума Ответить с цитированием
Старый 17.09.2009, 22:05   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Инетвал был равен имено 10000 в этом я уверен на все 100%

Надо для отсчёта времени желательно точного...
Нашёл такую реализацию
Код:
procedure timer.Execute;
var
 WhEvent: THandle;
 i: integer;
begin
 repeat
 WhEvent := CreateEvent(nil, true, false, 'et');
 for i:=0 to 59 do
     begin
      WaitForSingleObject(WhEvent, 1000);
      Form1.Button3.Caption:=Inttostr(i);
     end;
     
      ...

  until(i=100);
end;
Он вешал прогу и пришлось читать мануалы для выделеиня в другой поток, но шас подсказали другой вариант работы с системным временем.

А про TTimer я давно заметил за ним такой подвхо, что на разынх компах работает по разнаму и в этом я уверен потмоу что видил своими глазами Не переубдите

Последний раз редактировалось Dozent; 17.09.2009 в 22:07.
Dozent вне форума Ответить с цитированием
Старый 17.09.2009, 22:38   #5
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Ну не знаю, у меня таймер нормально отсчитывает 10 сек, но на таймере я всегда выставляю 1 сек.

А выдержки получаю через блок if и уменьшении переменой. Типа этого:

Код:
T := T - 1;
If T < 1 Then Begin
T := 10;
....
End;
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 17.09.2009, 22:46   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

The DispatchMessage function forwards this message when no other messages are in the thread's message queue.

из справки по WM_TIMER
объяснение почему таймер может по разному (до него просто не доходит очередь )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.09.2009, 22:49   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как счетчик я обычно использую свойство Tag самого таймера
и всегда нормально он считал.
может меняли интервал случайно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.09.2009, 23:00   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
The DispatchMessage function forwards this message when no other messages are in the thread's message queue.

из справки по WM_TIMER
объяснение почему таймер может по разному (до него просто не доходит очередь )
да я читал что такое что он обрабатывает 5 или 6 посчёту поэтому он не точен... но вроебы вариант описаный мно выше меня вполне устраивает, тестил спец на разных компах тики одинаковые...

не не менял ни чего
Dozent вне форума Ответить с цитированием
Старый 17.09.2009, 23:11   #9
Kukkk
Форумчанин
 
Регистрация: 28.06.2007
Сообщений: 123
По умолчанию

Программируете внешний порт, вешаете на него установку-электромагнит с контактом и маятник. Пара часов за паяльником и ваш таймер зависит только от широты положения компьютера и высоты над уровнем моря. Если серьезно- Ttimer разве не от системных часов работает? Они за годы сбиваются на секунды, это огромная точность. Куда больше то?
Kukkk вне форума Ответить с цитированием
Старый 18.09.2009, 17:00   #10
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Kukkk Посмотреть сообщение
Программируете внешний порт, вешаете на него установку-электромагнит с контактом и маятник. Пара часов за паяльником и ваш таймер зависит только от широты положения компьютера и высоты над уровнем моря. Если серьезно- Ttimer разве не от системных часов работает? Они за годы сбиваются на секунды, это огромная точность. Куда больше то?
если бы небыло никаки хпроблем не бы писал бы наверное
Мб у меня глючиная версия делфи?)
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер на delphi mish@ Общие вопросы Delphi 9 15.01.2010 03:28
Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается mnbvcxz11 Общие вопросы Delphi 3 22.08.2009 11:29
После запуска Торрента - загрузка проца 100% ??? spamer Компьютерное железо 11 29.04.2009 09:00
Wow Скорость проца... Altera Компьютерное железо 3 19.11.2008 12:26
Оптимизация проца средствами Windows (Пасхальные яйца) Nemesisking Свободное общение 13 13.04.2008 14:04