Не пойму, то-ли так задумано, то-ли это мои проблемы? Если нажать на кнопку несколько раз, то скорость таймера увеличивается, так и должно быть? code_17108.txt
Этот топик читают: Гость
Ответов: 875
Рейтинг: 322
|
|||
карма: 1 |
| ||
файлы: 1 | code_17108.txt [592B] [204] |
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Скольке не жал, никак не мог заствить квадрат двигаться быстрее
|
|||
карма: 22 |
|
Ответов: 970
Рейтинг: 270
|
|||
У меня с каждым нажатием скорость увеличивается, даже можно игру типа тараканьих бегов с мультиплеером сделать
![]() code_17109.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_17109.txt [1.7KB] [151] |
Ответов: 1304
Рейтинг: 405
|
|||
nesco, наблюдаю привязку к железу (Cel-1.7гГц) , но у меня происходит не увеличение скорости а полный останов таймера при повторном нажатии на кнопку, правда такое происходит через раз. На втором компе проблем нет (X2 3800).
ps: v183, svn, XP_SP3. |
|||
карма: 3 |
|
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Я уже писал про то, что нежелательно применять интерфейсные элементы в потоке MMTimer-a, результат действия таймера и самого интерфейсного элемента будут непредсказуемы
MAV, видимо, сказывается многопроцессорность и распараллеливание потоков. Остальное я описал выше Да и вообще, MMTimer желательно применять, или в фоновых приложениях, или в сервисах, те там, где гарантровано нет интерфейса |
|||
карма: 22 |
|
Ответов: 8960
Рейтинг: 824
|
|||
nesco,
nesco писал(а): MMTimer желательно применять.... где гарантровано нет интерфейса![]() |
|||
карма: 19 |
|
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Леонид писал(а): а называется "Таймер для игр"Откуда такое название, я его не называл так, но мультимедия, еще не есть игры, а гораздо больше, чем только игры. К тому же, все происходит от неумения применять данный компонент. Он запросто может служить для более точной выборки каких-то значений из потока данных с дискретизацией по времени, затем сохранить результат в памяти, а дальше, уже через обычный таймер (или поток) можно выдавать значение на интерфейс, читая значение из памяти. Если внимательно почитать справку, то сразу станет понятным, почему нежелательно на выходе ставить интерфейсные элементы wiki писал(а): Очевидно так же, что в случае занятости основного процесса сообщения от таймера начнут накапливаться в очереди и будут обработаны програмой в тот момент, когда это станет возможно(т.е. основной процесс вернется в состояние простоя). Элемент MMTimer не использует стандартную очередь сообщений, а полностью построен на потоке (Thread), вследствии чего работает параллельно основному процессу и способен генерировать события onTimer через честные 1мсКладов писал(а): Т.е. не только не гарантируется, что событие будет срабатывать только, когда процесс ожидает сообщений, но напротив: почти наверняка будет происходить прерывание текущей операции, чтобы выполнить указанный обработчик. Я пишу это уже пятый раз и никто так и не въехал в понимание этого процесса А ускорение будет наблюдаться на тех процессорах, которые поддерживают ускорение частоты, в зависимости от нагрузки процессора. Тут наблюдается увеличение нагрузки на процессор из-за наличия интерфейсного элемента, скорость процессора повышается, соответственно, увеличивается скорость перерисовки интерфейса, но таймер честно прерывает операцию отрисовки так, как ему надо. А отрисовка ускоряется только за счет ускорения процессора. Возможен еще и худший вариант -- отнимание времени процесса от других процессов в системе, что совсем есть нехорошо. Почему не наблюдается у меня, только потому, что второй процессор спокойно успевает перерисовать интерфейс, не влияя на первый. Вывод тут один -- такую схему построения, лучше не применять |
|||
карма: 22 |
|
Ответов: 8960
Рейтинг: 824
|
|||
kamakama, таймер включать/выключать надо подавая 1/0
![]() ![]() nesco, конечно, не в первый раз объясняете, но и не в десятый ![]() |
|||
карма: 19 |
| ||
файлы: 1 | code_17113.txt [747B] [158] |
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Леонид писал(а): таймер включать/выключать надо подавая 1/0![]() ![]() Вот скажи, где вот тут мы поток читаем, да и вообще, какие-то данные с каких-то точек ![]()
Ну как можно включать/выключать таймер, когда в методе всегда он только включается ![]() ------------ Дoбавленo в 13.19: Для отключения служит специальный метод doStop
Вот здесь, он действительно принудительно отключается, точнее, дается команда на отключение ------------ Дoбавленo в 13.23: Что-то вы все меня начинаете удивлять все больше и больше, это не есть хорошо |
|||
карма: 22 |
|
Ответов: 8960
Рейтинг: 824
|
|||
nesco, мера всему - эксперемент, я не глядел на коды,
ini писал(а): Включает или выключает таймер------------ Д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 |
|
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Леонид писал(а): а подал 1/0 на вход, как в других элементах - бежит и останавливаетсяА у меня -- нет, что есть правильно. Ну как он может останавливаться принудительно, если в кодах прописано FTimer.Enabled := true;. Леонид, ты внимательно читал предыдущие посты, там же написано где это происходит MAV писал(а): наблюдаю привязку к железу (Cel-1.7гГц) , но у меня происходит не увеличение скорости а полный останов таймера при повторном нажатии на кнопку, правда такое происходит через раз------------ Дoбавленo в 13.34: Леонид писал(а): наверное, у нас разные таймерыУ тебя совсем другой таймер, построенный по другому принципу и совсем не Кладовский ------------ Дoбавленo в 13.44: Да и вообще, ставить триггерное управление на запуск, я считаю неправильным. Алгоритмы управления таймерами должны быь одинаковы, что у нас сейчас и сделано. И еще вопрос, а точно ли у всех нас одинаковый таймеры ![]() |
|||
карма: 22 |
|
Ответов: 8960
Рейтинг: 824
|
|||
nesco,
ini писал(а): [About]
Version=1.0 Author=Dilma Mail=hiasm@mail.ru [Type] Class=Element Info=Таймер для игр Tab=GameEngine ![]() |
|||
карма: 19 |
|
Ответов: 875
Рейтинг: 322
|
|||
Если есть перемычка на PaintBox, то Timer не работает. Почему? code_17115.txt
|
|||
карма: 1 |
| ||
файлы: 1 | code_17115.txt [486B] [117] |
Ответов: 8960
Рейтинг: 824
|
|||
kamakama, ответ в Диспетчере задач - процессор загружен Вашим бессмысленным кольцом, не до таймера
![]() |
|||
карма: 19 |
|
Разработчик
Ответов: 26305
Рейтинг: 2146
|
|||
Леонид писал(а): а откуда он взялся, я не знаюЕго Dilma куда-то потом убрал, одна иконка от него только осталась. Я бы не сделал второй компонент с таким же именем |
|||
карма: 22 |
|