Отладка программ весьма интересный момент. Понять где и почему возникает ошибка и найти пути её предотвращения сродни распутыванию клубка детективного сюжета. А если еще при этом и код вам не сильно знаком, то тут уж точно превращаешься в заправского Шерлока Холмса.
К чему это я? Просто прочитал я тут статью The Dark Side of Application.ProcessMessages in Delphi Applications, и осознал в очередной раз граничность своих знаний и опыта. Вот как вы обычно изучаете какую-то новую программу, среду разработки, язык программирования и т.д.? Вникаете от и до во все тонкости реализации, разбираетесь как именно всё работает и лишь после этого приступаете к работе с инструментом? Или, получив определенный набор знаний и навыков, начинаете пользоваться программой, а при встрече с какими-либо трудностями расширяете свой кругозор знаний, разбираясь с их причиной? Думаю, что большинство работает как-то ближе ко второму варианту. По крайней мере так работаю я. Иногда это заставляет понервничать - "ну почему она опять не работает так, как я этого хочу", а иногда наоборот даёт повод для новых радостей - "вау, оказывается она ещё так умеет" (последнее чаще всего у меня возникало при использовании Microsoft Excel, раз за разом расширяя свои познания его огромных возможностей).
Так о чем это я. Прочитал я статью и понял насколько я был беспечен, используя Application.ProcessMessages. Однажды при удобном случае воспользовавшись вызовом этой процедуры, дальше уже особо не задумывался о возможных подводных камнях, а зря. Если коротко, то надо помнить, что даже самые быстрые, на ваш взгляд, участки кода могут выполняться продолжительное время, а за это время пользователь, увидев "подвисшую" программу, может добавить действий в очередь событий - добивая бедную кнопку в ожидании реакции или еще каким-либо образом. А все эти лишние события могут существенно изменить ожидаемый результат работы программы. Поэтому иногда лучше просто задизейблить элементы управления на время выполнения спорного участка кода, чтобы оградить любимого вашего пользователя от непродуманных действий ;)
P.S. Конечно это всё основы основ и мне стыдно признаваться, что я раньше не знал или не думал об этом, но так уж получилось, и лучше обратить на это внимание позже, чем и дальше ругать всё вокруг при нештатном поведении тобою же написанной программы ;)
Комментариев нет:
Отправить комментарий