Вверх ↑
Этот топик читают: Гость
Ответов: 875
Рейтинг: 322
#1: 2010-02-27 22:14:56 ЛС | профиль | цитата
Не пойму, то-ли так задумано, то-ли это мои проблемы? Если нажать на кнопку несколько раз, то скорость таймера увеличивается, так и должно быть? code_17108.txt
карма: 1

0
файлы: 1code_17108.txt [592B] [204]
Разработчик
Ответов: 26305
Рейтинг: 2146
#2: 2010-02-27 22:20:24 ЛС | профиль | цитата
Скольке не жал, никак не мог заствить квадрат двигаться быстрее
карма: 22

0
Ответов: 970
Рейтинг: 270
#3: 2010-02-27 22:27:07 ЛС | профиль | цитата
У меня с каждым нажатием скорость увеличивается, даже можно игру типа тараканьих бегов с мультиплеером сделать

code_17109.txt
карма: 0

0
файлы: 1code_17109.txt [1.7KB] [151]
Ответов: 1304
Рейтинг: 405
#4: 2010-02-27 22:40:49 ЛС | профиль | цитата
nesco, наблюдаю привязку к железу (Cel-1.7гГц) , но у меня происходит не увеличение скорости а полный останов таймера при повторном нажатии на кнопку, правда такое происходит через раз. На втором компе проблем нет (X2 3800).
ps: v183, svn, XP_SP3.
карма: 3

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#5: 2010-02-27 22:43:16 ЛС | профиль | цитата
Я уже писал про то, что нежелательно применять интерфейсные элементы в потоке MMTimer-a, результат действия таймера и самого интерфейсного элемента будут непредсказуемы

MAV, видимо, сказывается многопроцессорность и распараллеливание потоков. Остальное я описал выше

Да и вообще, MMTimer желательно применять, или в фоновых приложениях, или в сервисах, те там, где гарантровано нет интерфейса
карма: 22

0
Ответов: 8960
Рейтинг: 824
#6: 2010-02-28 10:35:28 ЛС | профиль | цитата
nesco,
nesco писал(а):
MMTimer желательно применять.... где гарантровано нет интерфейса
а называется "Таймер для игр" - где же найти без интерфейсную игру, разве что в звук поиграть в терменвоксовом режиме
карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#7: 2010-02-28 10:42:16 ЛС | профиль | цитата
Леонид писал(а):
а называется "Таймер для игр"

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

Если внимательно почитать справку, то сразу станет понятным, почему нежелательно на выходе ставить интерфейсные элементы

wiki писал(а):
Очевидно так же, что в случае занятости основного процесса сообщения от таймера начнут накапливаться в очереди и будут обработаны програмой в тот момент, когда это станет возможно(т.е. основной процесс вернется в состояние простоя). Элемент MMTimer не использует стандартную очередь сообщений, а полностью построен на потоке (Thread), вследствии чего работает параллельно основному процессу и способен генерировать события onTimer через честные 1мс


Кладов писал(а):
Т.е. не только не гарантируется, что событие будет срабатывать только, когда процесс ожидает сообщений, но напротив: почти наверняка будет происходить прерывание текущей операции, чтобы выполнить указанный обработчик.


Я пишу это уже пятый раз и никто так и не въехал в понимание этого процесса

А ускорение будет наблюдаться на тех процессорах, которые поддерживают ускорение частоты, в зависимости от нагрузки процессора. Тут наблюдается увеличение нагрузки на процессор из-за наличия интерфейсного элемента, скорость процессора повышается, соответственно, увеличивается скорость перерисовки интерфейса, но таймер честно прерывает операцию отрисовки так, как ему надо. А отрисовка ускоряется только за счет ускорения процессора. Возможен еще и худший вариант -- отнимание времени процесса от других процессов в системе, что совсем есть нехорошо. Почему не наблюдается у меня, только потому, что второй процессор спокойно успевает перерисовать интерфейс, не влияя на первый.

Вывод тут один -- такую схему построения, лучше не применять
карма: 22

0
Ответов: 8960
Рейтинг: 824
#8: 2010-02-28 13:09:42 ЛС | профиль | цитата
kamakama, таймер включать/выключать надо подавая 1/0 code_17113.txt , а по Вашей схеме посмотреть в Диспетчере количество потоков при каждом нажатии кнопки
nesco, конечно, не в первый раз объясняете, но и не в десятый [offtop]Бог вознаградит за долготерпение![/offtop]
карма: 19

0
файлы: 1code_17113.txt [747B] [158]
Разработчик
Ответов: 26305
Рейтинг: 2146
#9: 2010-02-28 13:16:26 ЛС | профиль | цитата
Леонид писал(а):
таймер включать/выключать надо подавая 1/0

Первый раз о таком слышу, откуда инфа-то

Вот скажи, где вот тут мы поток читаем, да и вообще, какие-то данные с каких-то точек


procedure THIMMTimer._work_doTimer;
begin
AutoStop := AutoStopDEF;
FTimer.Enabled := true;
end;

Ну как можно включать/выключать таймер, когда в методе всегда он только включается
------------ Дoбавленo в 13.19:
Для отключения служит специальный метод doStop


procedure THIMMTimer._work_doStop;
begin
OnStop;
end;

-------

procedure THIMMTimer.OnStop;
begin
FTimer.Enabled := false;
_hi_OnEvent(_event_onStop);
end;

Вот здесь, он действительно принудительно отключается, точнее, дается команда на отключение
------------ Дoбавленo в 13.23:
Что-то вы все меня начинаете удивлять все больше и больше, это не есть хорошо
карма: 22

0
Ответов: 8960
Рейтинг: 824
#10: 2010-02-28 13:26:08 ЛС | профиль | цитата
nesco, мера всему - эксперемент, я не глядел на коды,
ini писал(а):
Включает или выключает таймер
а подал 1/0 на вход, как в других элементах - бежит и останавливается, что и надо коллеге kamakama
------------ Дoбавленo в 13.30:
nesco, наверное, у нас разные таймеры
pas писал(а):
procedure THIMMTimer._work_doTimer;
begin
if ToInteger(_Data) = 0 then
timeKillEvent(uTimerID)
else
uTimerID := timeSetEvent(_prop_Interval,0,@FNTimeCallBack,cardinal(pointer(self)),TIME_PERIODIC);
end;

карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#11: 2010-02-28 13:31:50 ЛС | профиль | цитата
Леонид писал(а):
а подал 1/0 на вход, как в других элементах - бежит и останавливается

А у меня -- нет, что есть правильно. Ну как он может останавливаться принудительно, если в кодах прописано FTimer.Enabled := true;.

Леонид, ты внимательно читал предыдущие посты, там же написано где это происходит

MAV писал(а):
наблюдаю привязку к железу (Cel-1.7гГц) , но у меня происходит не увеличение скорости а полный останов таймера при повторном нажатии на кнопку, правда такое происходит через раз

------------ Дoбавленo в 13.34:
Леонид писал(а):
наверное, у нас разные таймеры

У тебя совсем другой таймер, построенный по другому принципу и совсем не Кладовский
------------ Дoбавленo в 13.44:
Да и вообще, ставить триггерное управление на запуск, я считаю неправильным. Алгоритмы управления таймерами должны быь одинаковы, что у нас сейчас и сделано.

И еще вопрос, а точно ли у всех нас одинаковый таймеры
карма: 22

0
Ответов: 8960
Рейтинг: 824
#12: 2010-02-28 14:14:33 ЛС | профиль | цитата
nesco,
ini писал(а):
[About]
Version=1.0
Author=Dilma
Mail=hiasm@mail.ru

[Type]
Class=Element
Info=Таймер для игр
Tab=GameEngine
, а откуда он взялся, я не знаю
карма: 19

0
Ответов: 875
Рейтинг: 322
#13: 2010-02-28 14:55:45 ЛС | профиль | цитата
Если есть перемычка на PaintBox, то Timer не работает. Почему? code_17115.txt
карма: 1

0
файлы: 1code_17115.txt [486B] [117]
Ответов: 8960
Рейтинг: 824
#14: 2010-02-28 15:15:27 ЛС | профиль | цитата
kamakama, ответ в Диспетчере задач - процессор загружен Вашим бессмысленным кольцом, не до таймера
карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#15: 2010-02-28 15:32:47 ЛС | профиль | цитата
Леонид писал(а):
а откуда он взялся, я не знаю

Его Dilma куда-то потом убрал, одна иконка от него только осталась. Я бы не сделал второй компонент с таким же именем
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)