Разница в WinXP и Win98

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Александр Дудченко
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.11.2004 (Сб) 18:58

Разница в WinXP и Win98

Сообщение Александр Дудченко » 02.11.2005 (Ср) 23:39

Здравствуйте!

Короче, у меня такая проблема. Есть игра типа спортивный менеджер, там есть такая анимация с перемещением Label при броске и т.д. Для задержки исп. Sleep и DoEvents.
На Windows 98 игра идет нормально, ровно, гладко – претензий нет.
На Windows XP игра идет какими-то рваными кусками. Иногда, в некоторый момент скорость анимации нормальная и соответствует уровню Windows98, но уже через пару минут этот же самый цикл замедляется раз в пять и метка начинает вся дергаться, кривляться, вообщем, ведет себя крайне невоспитано:).
Я пробовал убирать DoEvents, но эффект тот же. Пробовал вместо Sleep ставить пустой цикл, но эффект тот же.

Я так почитал тут форум, понял, что это происходит из-за «глубоких различий в архитектуре между Windows 98 и Windows XP». Понятно. Ну а что мне тогда делать? Как вообще оформить такой алгоритм с плавным перемещением группы Label, Picture и т.п. объектов по экрану для создания примитивной анимации, чтобы все это шло ровно, а не с какими-то непонятными рваными кусками? И вообще, из-за чего этот темп в Windows XP сбивается? Какие-то другие процессы что ли в Win XP периодически параллельно запускаются, меняя приоритет программы, или еще что?

И вообще, как-нибудь можно решить такую проблему с плавными задержками?

P.S. Переход на C++ не предлагать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.11.2005 (Ср) 23:47

Ты не дочитал до конца :)

Глубокие различия в архитектуре между Windows 98 и Windows XP в итоге свелись к разной точности стандартного системного таймера :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Разница в WinXP и Win98

Сообщение tyomitch » 03.11.2005 (Чт) 1:10

Александр Дудченко писал(а):И вообще, как-нибудь можно решить такую проблему с плавными задержками?

Легко. Выбросить Sleep и DoEvents, заюзать таймер.
Так и следовало делать с самого начала.
Изображение

Александр Дудченко
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.11.2004 (Сб) 18:58

Сообщение Александр Дудченко » 04.11.2005 (Пт) 10:16

Так не понятно все равно, почему эта самая анимация идет на XP такими рывками? И почему по ходу программы она то ускоряется, то замедляется - таймер должен обеспечивать одинаковую работу скорости... Если даже точность таймера в XP меньше, то не в несколько же раз...

Я так понимаю, что дело все-таки в приоритетах - запускаются какие-то другие скрытые процессы, которые периодически заставляют менять приоритет моей программы.

Кстати, Sleep работает даже лучше, чем Timer. Timer хорош только если задержка от полусекунды и выше. А для коротких задержек он не подходит вовсе...

А что касается "выкинуть" DoEvents, то как же я его выкину? Даже если таймер будет существовать, я все равно должен писать что-то типа процедуры:
Sub Waiting
WaitTimer=False
While Not(WaitTimer)
DoEvents
Wend
End Sub

Так что DoEvents все равно должен будет использоваться.

Или вы имеете ввиду API-шный таймер? Так чем тот таймер отличается по точности от Sleep?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.11.2005 (Пт) 12:30

Александр Дудченко писал(а):Если даже точность таймера в XP меньше, то не в несколько же раз...

Судя по http://bbs.vbstreets.ru/viewtopic.php?p=62323#62323, разница в 5 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.11.2005 (Пт) 12:41

Александр Дудченко писал(а):Так что DoEvents все равно должен будет использоваться.

Мне тяжело давать советы в отношении кода, который я не вижу, но я уверен, что весь цикл вместе с DoEvents можно заменить на Timer (не API, а обычный контрол).

Вон, и Аппельман говорил, что DoEvents - зло...
Изображение

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 04.11.2005 (Пт) 19:00

tyomitch
Можешь привсти цитату? Насчет Аппельмана.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 04.11.2005 (Пт) 20:43

на счет DoEvents - почти как личное оскорбление. Требую пояснения.
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.11.2005 (Пт) 20:52

http://www.google.com/search?hl=en&q=doevents+appleman
первая же ссылка - по теме.
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 04.11.2005 (Пт) 22:30

открыл, а там:

"Security update in progress - we'll be back in about an hour."

лан, подождю...
ХЎ

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.11.2005 (Пн) 9:36

Зло это, зло. Только иногда необходимое :)
Правильная программа должна работать только на событиях, без циклов с DoEvents.
Lasciate ogni speranza, voi ch'entrate.

Александр Дудченко
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.11.2004 (Сб) 18:58

Сообщение Александр Дудченко » 09.11.2005 (Ср) 19:40

Маленькую задержку для анимации, например, перемещения фигур по полю, с использованием Timer не сделаешь - в XP он быстрее чем за 1/8 секунды явно не среагирует. И вообще Timer в Win98 и Timer в Win XP работают совершенно с разной скоростью, особенно если интервал стоит меньше 1 секунды (т.е. Timer1.Interval<1000).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.11.2005 (Чт) 9:14

Есть мультимедийный таймер, он ходит с высокой точностью.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, YaCy [Bot], Yandex-бот и гости: 98

    TopList