Разрабатываемая программа на VB6 “заглючила”. Как устранить?
В процессе работы она считывает файлы, анализирует их и, по результатам анализа, выдает замечания. Файлы тестовые, кол-во выводимых замечаний, для разных режимов анализа, известно.
Программа на выходе и тут, работая с программой, заметил, что она стала неадекватно себя вести.
Откорректируешь что-то, запустишь программу без точек остановок, выдает не то кол-во замечаний. Ничего не меняя, пройдешь программу с точками останова – и все нормализуется: начинает работать как задумано (и без точек останова).
Компоновка всей программы ничего не меняет.
Кто знает, встречался с подобным, посоветуйте с этим бороться.
И есть ли программы, проверяющие программы, разрабатываемые на VB6, на внутреннюю вшивость или аналогичные ситуации.
А код точно правильный? Если да, то, наверно, придётся переустановить бейсик!
"Код" - что под этим подразумевается
Код - это текст самой программы. У меня тоже много раз глючил бейсик и всегда дело было в моём коде.
Как ни тяжело это сознавать, но это так.
Но все равно хочется облегчить себе жизнь.
В одной Вашей теме, в которой я принимал участие (http://forum.codenet.ru/showthread.php?t=29101&highlight=Basic+%EF%E5%F0%E5%EC%E5%ED%ED%FB%E5 ), посвященной отказу компилятора, компилировать строку с двумя переменными, Вами был упомянут Анализатор, на котором была проверена программа.
Вы не могли бы пояснить, что это за зверь, и с чем его едят?
С уважением!
Я полагаю, что с компилятором все нормально. А собака зарыта в том, что программа по разному работает когда есть точки останова и когда их нет. Т.е. в коде должны в нужных местах присутствовать операторы DoEvents или циклы DO ... LOOP, WHILE ... WEND, в которых происходит ожидание завершения определенных процедур, занимающих приличное время. Фокус в том, чтобы правильно определить критерий выхода из цикла.
Но все равно хочется облегчить себе жизнь.
В одной Вашей теме, в которой я принимал участие (http://forum.codenet.ru/showthread.php?t=29101&highlight=Basic+%EF%E5%F0%E5%EC%E5%ED%ED%FB%E5 ), посвященной отказу компилятора, компилировать строку с двумя переменными, Вами был упомянут Анализатор, на котором была проверена программа.
Вы не могли бы пояснить, что это за зверь, и с чем его едят?
С уважением![/QUOTE]
Это прога называется Aivosto Projekt Analizer.
Эта прога сама анализирует твой проект и, как правило всегда, найдёт там кучу недочётов.
Назначение DoEvents: показать какой объект программа обрабатывает в данный момент времени. Команда используется:
- до открытия конкретного объекта
код программы:
For i = 1 To LastObject
NameForm. NameOb = MasNameOb (i).NameOb) ‘очередной объект
DoEvents ‘выводим наименованиея объект ана дисплей(методом “ТЫКА” определил, что она позволяет вывести введенное на экран дисплея)
……..’добираемся до объекта
'откроем форму для просмотра
AccDoCmd.OpenForm MasNameOb (i).NameOb), acDesign, , , , acHidden
‘ AccDoCmd – это указатель на приложениеAccess. DoCmd
next i
- после окончания обработки объектов одного типа.
- перед началом очередного этапа работы программы
Сколько не встечался с "Глючанием", его причины всегда настолько просты, что на них даже не подумаешь. Обратился на форум в надежде, что кто-то уже не только наступил на эти грабли, но и НАШЕЛ их.
[QUOTE=ace lighting]Эта прога сама анализирует твой проект и, как правило всегда, найдёт там кучу недочётов.[/QUOTE]Спасибо, найду и воспользуюсь
Это - заблуждение. Назначение DoEvents: предоставить ресурсы системе с тем чтобы процессор выполнил задачи, стоящие в очереди на исполнение.
Правильное замечание.Можно использовать комбинацию TranslateMessage/DispatchMessage
Сейчас DoEvents обеспечивает во время работы программы, выполнение программой/(операционной системой) следующих операций:
- вывод на дисплей обновлений в полях форму программы;
- отработка перемещение/Click мыши на форме программы;
- и если был Click мыши на объекте кнопка программы:
-- приостановка работы программы.
-- запуск кода этой кнопки изменяющей свойства Visible фреймов формы.
-- вывод на дисплей этих изменений
-- продолжить работу программы с места приостановки.
Команда DoEvents была найдена методом “ТЫКА”: раз обеспечивает требуемое, то и ладно. И сейчас, раз обеспечивает выполнение требуемого, не заменяется
Please, подскажите правильно ли используется команда DoEvents или есть другие команды для этих операций
С уважением
В принципе,ты правильно понял.DoEbents используется,чтобы донести до программы,что ей пришли какие-то сообщения(как то:двинулась мышь,нажалась кнопка,окно давно не перерисовывалось и т.д.).Короче,DoEbents используется для отвиса программы,чтобы она отвечала.Если хочешь,дам пример со связкой Translate/DispatchMessage
Желательно с комментариями. Как его получить?
С уважением!
Какие примеры?С Dispatch/Translate'ом?