Трудный переход программ на VB с Win98 на WinXP

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

Трудный переход программ на VB с Win98 на WinXP

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

Раньше я писал свои игрушки под Windows 98 (язык Visial Basic 6.3). И все они нормально работали,
пока я не решил перейти на Windows XP. После этого стали возникать какие-то удивительные проблемы:
1. TextBox "загружает" в себя текст из файла очень-очень медленно. Процесс немного ускорился, когда
я стал сначало грузить текст в переменную, а затем присваивать Text1.Text значение этой переменной.
Но и тут работает не без косяков, и опять же неожиданно медленно (когда на 98-ом работала мгновенно).
2. Таймер и вообще все задержки, паузы работают совсем уж расхлябано. Иногда игра начинает работать
быстро, а иногда вдруг существенно замедляется. Причем несмотря на одинаковую задержку даже несколько
повторяющихся действий выполняются за разное время (скажем, ход фишки соперника может пройти быстро, а
может в 2-3 раза дольше). При этом, еще раз говорю, на Windows 98 все работало абсолютно нормально.
Впрочем, те же проблемы и с некоторыми другими оконными приложениями.
3. Проходивший ранее способ переключения расширения экрана через user32.dll перестал работать, теперь
приходится менять экран с помощью Direct X (а это отнимает много памяти).
4. Когда мне это все надоело и я в свойствах нормально работавшей до этого программы решил установить
совместимость с "Windows 98/ME", программа часто стала выдавать различные странные ошибки при старте.
При этом без режима совместимости она их не выдает, и, кроме того, в том же самом Win98 она ошибки не выдавала.

Прошу народ прокомментировать все вышесказанное.

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

Сообщение GSerg » 06.11.2004 (Сб) 19:44

1. Странно, вообще-то. Никогда не сталкивался. Может, стоит поставить SP6 на VB. Может, SP2 на XP. Может, дело в ненужных фоновых конверсиях в/из юникода. Даже не знаю.
2. Это есть... Опять же, я не сталкивался, но люди говорят. И справиться не могут. Поищи на первых 3-4 страницах аналогичные топики.
3. Ммм... Чё не работает?
4. А этим я вообще никогда не пользуюсь...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.11.2004 (Сб) 20:04

GSerg писал(а):Может, SP2 на XP.
Не надо!!! :shock: Пусть уж лучше текст медленно загружается! :shock:

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

Сообщение GSerg » 06.11.2004 (Сб) 20:07

Таааак... :)
Ну-ка, признавайся, почему :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.11.2004 (Сб) 20:15

У меня SP2, и всё нормально, работает. Не разделяю чувств A.A.Z. :)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.11.2004 (Сб) 20:17

(чисто по своим ощущениям) Второй сервиспук создает большие проблемы в виде "неработания" некоторых программ, учащения появления экрана STOP, запрета на все, что связано с вылазкой в инет из программ типа eDonkey, глюков антивирусов, проблем с активацией, замедления работы программ, замедления загрузки винды, частых критических ошибок программ, утечек "в никуда" памяти на ЖД, проблем с корзиной и т.д. :) Доходит до сообщения "NTLDR is missing, Press Any Key" :)

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.11.2004 (Сб) 20:18

Видимо, мне плохой он попался :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.11.2004 (Сб) 20:19

Не иначе :)
У меня он тоже сначала запрещал, но давал возможность разрешения. Уже около недели окна не выскакивают...

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

Сообщение Александр Дудченко » 06.11.2004 (Сб) 20:22

Отвечаю на GSerg:
1. Реально обычный TextBox ну очень медленно работает. Грузит где-то 5 килобайт текста секунд 30 (на Win98 грузил мгновенно)!
2. А что вообще делать? Таймер - абсолютно рваный темп (особенно с небольшими задержками). Цикл типа for i=1 to 50000 doevents next i вообще может заканчиваться за 0.1 секунду, а может за 3 секунды. При этом на Win98 такого не было.
3. Ну переключение расширения экрана через
Declare Function ChangeDisplaySettings Lib "user32.dll" Alias "ChangeDisplaySettingsA" (lpDevMode As DEVMODE, ByVal dwFalgs As Long) As Long
Declare Function EnumDisplaySettings Lib "user32.dll" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Long

Public Sub SetVideo(Width As Long, Height As Long, Depth As Long)
Dim DM As DEVMODE
DM.dmPelsWidth = Width
DM.dmPelsHeight = Height
DM.dmBitsPerPel = Depth
DM.dmSize = Len(DM)
DM.dmFields = DM_PELSWIDTH + DM_PELSHEIGHT + DM_BITSPERPEL
ChangeDisplaySettings DM, 0
End Sub

перестало работать. Я, конечно, могу двигать через DirectX, но все равно возникает эдакая нервозность: на одной Windows моя программа будет работать, а на другой тоже якобы "полностью совместимой с прошлой версией" откажется работать.

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

Сообщение GSerg » 06.11.2004 (Сб) 20:22

сервиспук

Можно в цитату? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.11.2004 (Сб) 20:24

Конечно, пожалуйста :)

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

Сообщение GSerg » 06.11.2004 (Сб) 20:30

Да ладно :)
Человек-пук прикольнее :)


Александр!
Дык какое значение возвращает CDS, для начала? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

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

Да бог с CDS, ты мне хотя бы ответь через что можно сделать элементарную небольшую задержку. Через Timer не получается, через цикл не стабильно, через функцию time$ - тоже не все гладко. Это раз.
А во-вторых, объясни, почему одно и тоже приложение работает на XP и Win98 по-разному и для каждого нужно составлять свой алгоритм! (ну, детали алгоритма). Ведь вроде как XP как более поздняя версия должна поддерживать все созданное более рано.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 06.11.2004 (Сб) 23:50

По поводу задержки:
Код: Выделить всё
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliSeconds As Long)
' Использование -
' Sleep <время паузы в тысячных секунды>

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

Сообщение GSerg » 07.11.2004 (Вс) 0:02

А во-вторых, объясняю, что есть http://www.msdn.microsoft.com/library, и там описываются отличия работы функций.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение Александр Дудченко » 08.11.2004 (Пн) 15:04

Спасибо!

Но все же использование Sleep далеко не идеально. К тому же это не решает проблему "маленьких задержек". То есть представьте, что на экран надо поточечно и постепенно вывести кривую (абстрактный пример, ко мне отношения не имеет). В случае использования Sleep задержка Sleep 1 или задержка Sleep 100 - это одно и тоже, то есть "маленьких задержек" все равно не получается. То есть паузу на секунду я могу сделать, а вот паузу на 1/10 секунды уже не получается. Но в случае последовательной отрисовки, анимации и во многих других ситуациях 1 кадр в секунду - это, сами понимаете, слишком мало.
Так что, вероятно, единственный способ организации малых задержек - это все таки цикл
For i=1 to Chislo
Doevents
Next i
Правда, определить это самое Chislo из-за различной скорости в WinXP и Win98 очень сложно. То есть для конкретной машины подобрать можно,а на разных компах работать будет по-разному.

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

Сообщение GSerg » 08.11.2004 (Пн) 15:43

Ещё можно попробовать waitforsingleobject на заведомо неактивном объекте с желаемым таймаутом...
Ещё можно поюзать QueryPerformanceCounter...
А QueryPerformanceFrequency вообще возвращает как раз то самое Chislo...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 08.11.2004 (Пн) 18:29

На самом деле, разница между 1 и 100 есть, нету разницы в диапазоне [1; 17] :roll:

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 08.11.2004 (Пн) 20:55

Sleep работает по разному не только на разных системах, но и на разных компах.
Кстати лично у меня с переходом на XP никаких проблем по работе написанных мною приложений не было.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.11.2004 (Вт) 8:59

1. Реально обычный TextBox ну очень медленно работает. Грузит где-то 5 килобайт текста секунд 30 (на Win98 грузил мгновенно)!


А как именно он грузит текст? Такая "скорость" - это у тебя явно что-то ненормально... Случайно не посимвольно в него добавляешь?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Сообщение Александр Дудченко » 09.11.2004 (Вт) 16:52

Andrey Fedorov:
не посимвольно, а так что
While not eof(1)
Line Input #1,a
Text1.Text = Text1.Text & a
wend

Впрочем, если использовать для этих же целей переменную (ну в смысле сначала "набивать" в переменную, а уж потом присваивать TextBox-у), то все работает нормально. Но вопрос не про это, а про то, что в Win98 указанный код абсолютно не тормозил, а здесь, в якобы совместимой с предыдущими версиями, WinXP какой-то непомерный тормоз и вообще различные глюки по всей программе. И это уже после компиляции программы, уже после exe-файла. Я, естественно, после перехода с Win98 на WinXP прогу переделал, но теперь возникает понятная обеспокоенность - вот выйдет какая-нибудь следующая версия WinXP - и опять ничего работать не будет. И что мне может гарантировать работу программы на всех более-менее популярных операционных системах семейства Windows. Не могу же я все ОС от Microsoft на своем компьютере тестировать!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 09.11.2004 (Вт) 17:46

Впрочем, если использовать для этих же целей переменную


А ведь так и надо, по хорошему.
Или, в твоем случае, можно загружать в TextBox сразу весь файл.

Похоже у тебя после каждого присвоения идет перерисовка, и строчек в нем много... Может еще и на его событие Change что-либо прикручено...

Но вопрос не про это, а про то, что в Win98 указанный код абсолютно не тормозил, а здесь, в якобы совместимой с предыдущими версиями, WinXP какой-то непомерный тормоз и вообще различные глюки по всей программе.


Просто все глюки и нехорошести в твоей программе повылазили наружу. Должен радоваться... ;)

Не могу же я все ОС от Microsoft на своем компьютере тестировать!


Нужно просто изначально соблюдать основные принципы хорошего тона... А большие проги (с обилием API-шных функций) обычно и приходится тестить, по крайней мере под граничными версиями операционок...[/quote]
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 1

    TopList