Это происходит внутри обработчика событий в форме?Я собираюсь догадаться, что это так.В этом случае «Заголовок» находится в области формы.Текст заголовка формы управляется не VCL, а Windows, и если вы отправляете новое сообщение WM_SETTEXT на каждой итерации цикла.
Подробное объяснение того, почему он делает то, что делаетпотребовалось бы знание внутренних компонентов Windows, которых у меня нет, но если бы я предположил, я бы сказал, что это примерно так:
Каждый раз, когда вы отправляете это сообщение WM_SETTEXT с новой подписью, Windowsпроверяет, чтобы убедиться, что он не идентичен существующему заголовку.Если это так, он может выйти немедленно.Вот почему редкое изменение (которое использует только ii
) не замедляет работу вашей системы.Но если он меняется на каждой итерации, Windows должна выполнить какое-то переключение задач, чтобы изменить его.
Что касается того, почему это приведет к зависанию всей системы под ядром Vista (включая Win7), ноне XP, это совершенно за пределами моей области знаний.Но если вы пытаетесь сделать это как какой-то индикатор прогресса, есть лучшие способы, особенно если этот цикл настолько узок, насколько это выглядит.
Лучший способ обрабатывать обновления прогресса в узком цикле - этосчитать итерации и запускать только один раз каждые X раз.(100 или 1000 могут быть хорошими значениями для X, в зависимости от того, сколько раз он работает и как быстро все это занимает.) Это в основном то, что делает опция ii
only.Вы также можете попытаться поместить индикатор прогресса в форму, чтобы измерить прогресс, вместо того, чтобы делать это с помощью заголовка формы.