![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Задача:
Сделать, чтобы во время ожидания ответа от устройства, крутился рисунок на форме (в точности как иконка браузера во время загрузки, только где-т 150x150рх) Решение: Заготовил стопку картинок. Положил их в массив изображений одно над другим. IF по таймеру переключает им Visible:
Всё работает, мерцания, бликов не наблюдается. Но! Вращение получается неравномерным, переключение кадров периодически задерживается, что приводит к неприятному "дерганью". Впечатление, что таймер вызывается не через равные промежутки. Машина - 1GHz (не очень заметно, но что же будет на более медленных?..) Кто что порекомендует? |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 10 Всего: 68 |
||||
|
||||
Black_Star |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 9.9.2003 Где: Minsk Репутация: 4 Всего: 4 |
~FoX~, возможно имелось не то.
JusTalionis, тормоза возникают по многим причинам. Все дело в очереди обработки процессов. Как выход, могу посоветовать установить приоритет приложения в REALTIME. Будет немного лучше. |
|||
|
||||
Akina |
|
||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Тупо меняем на:
Каков TimeR Tick? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Насколько я знаю mod (div) считается дольше чем if (djnz).
Может это и не на всех процессорах так, но на некоторых именно так... http://www.computer-museum.ru/technlgy/pro...MCS51/instr.htm -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Если бы мы писАли на Ассемблере - да. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
А из VB тот же ассемблер делается компилятором, вопрос только насколько эффективно что заменяется...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Akina:
Мысль красивая! Не вдаваясь в теоретические вопросы, я ее проверил. Заработало точно так же. Ни малейшего различия с работой моего варианта заметить не удалось. (Предупреждая ненужные гипотезы: ушел от обращения к тегу, создав нормальную глобальную переменную. Изменений также нет.) Интервал таймера- 40. ~FoX~: Код, приведенный в твоей статье неработоспособен (копировал из текста). Ошибки: Dim PicWidth As Single,'ширина картинки - не нужна запятая Установим у всех Image свойства ... AutoRedraw=True, AutoSize=True. - у Image нет таких свойств два PictureBox ... их тоже сделаем невидимыми Visible=False - тогда тогда вообще ничего не видно PictureBox1.Picture = Msk(i).Picture PictureBox2.Picture = Kadr(i).Picture Здесь вместо (i) должно быть (SKadr). Исправив это, запустил с горем пополам - тормозит жутко, форма вся мерцает, кошмар. Может на шести кадрах такое и прокатывало, но не на 36. Black_Star: Вот я тоже сразу про это подумал! Но как сделать это правильно пока не волоку... Ведь все ресурсы забирать нельзя - в это же время будет ожидание ответа от устройства, нужно же хоть что-то ему оставить тоже. (А когда анимация отработает, лучше вообще максимально понизить, чтоб освободить ресурс.) ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Их нет. Не считая компактности и (имхо) читабельности кода. Мерцать будет однозначно... попробуй поставить не менее 55... впрочем, все одно будет мерцать. я бы пошел по иному пути... грубо где-то вот так: 36 картинок. Скажем 55.6 мс на картинку - это 2 с на прокрутку всего набора. Делаем таймер 5-10 мс. Помним текущую картинку. В процедуре таймера спрашиваем у системы точное время через API. Делим на 2 с, берем остаток, множим на 18, берем целое, получаем номер картинки, которая в данный момент ДОЛЖНА быть на экране. Если она - процедуру закончить, иначе отрисовать нужную. В этом случае вместо ПРИТОРМАЖИВАНИЯ вывода очередной картинки ты в худшем случае будешь получать ПРОПУСК очередной картинки - а это не так заметно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Akina:
Я пробовал разные значения таймера. При 50 и более, дерганье еще хуже заметно. Уменьшал до 20 .. 10 - вот тогда еще ничего! Причем реально скорость вращения не увеличивается настолько, так и остается где-то оборот в полторы секунды. Ну я и раньше знал, что таймер в VB "символический"... Интересная идея вообще от него отказаться и переключать чисто по системному времени, всё написав "руками". НО! ведь надо будет еще попутно опрос устройства там как-то вставлять тогда... Таймер был бы, конечно, удобнее значительно! Короч, есть, что вспахивать. Сегодня вечером, надеюсь, попробую; что получится отпишу. ЗЫ Пропуск кадра - это дерганье вперед. При такой маленькой скорости (20FPS) все равно заметно. Хотя, в нормальном видео - это неплохой вариант синхронизации для тормозящих машин. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
а таймер-то тут при чем? на отрисовку картинки нужно время - быстрее чем система отрисовывает, никакой таймер не сможет обновлять. Ни VB-шный, ни другой. Так что если и двигаться - то в сторону ускорения именно процесса вывода картинки на экран. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Akina:
Я обратил внимание на следующую вещь. В режиме работы в среде VB, когда эту стопку изображений двигаешь, или в процессе добавления каждой новой картинки в массив, Эта стопка автоматически перерисовывается на экране, начиная с первой. Так вот, при этом, вся стопка из 36 кадров пролетает менее чем за 0.3 сек, едва успеваешь увидеть, что картинка обернулась на полный оборот. Так что вывод сам по себе имеет значительный запас времени. Можно посчитать: 36 кадров 150x150px - это 810K. За полторы секунды - это 540K в секунду. На гигагерцовой машине - более полутора тысяч тактов в запасе на копирование только одного пиксела. Я понимаю, что там не все так просто, но тысячекратный запас - это, IMHO, достаточно для нормальной работы. Так что, тормозит сама Винда, но где именно и как с этим бороться, я не выяснил. |
|||
|
||||
Black_Star |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 192 Регистрация: 9.9.2003 Где: Minsk Репутация: 4 Всего: 4 |
А это и не получится.
|
|||
|
||||
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 11 Всего: 109 |
Вот тут детский пример, который навряд ли тебе подойдёт...
http://www.i2r.ru/static/375/out_15456.shtml А вот тут - интересная мысль. Как ты думаешь, сможешь ли ты заменить свою коллекцию рисунков одним gif-файлом? Нужна анимация, показываешь гифку. Не нужна анимация, на месте гифки рисуешь стационарный рисунок... Как тебе идея? Вот тут идея реализации... http://www.megalib.com/books/1395/272.htm Добавлено через 1 минуту и 17 секунд И ресурсов почти не жрёт... Это сообщение отредактировал(а) mihanik - 27.3.2007, 13:35 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |