Приложение MDI потребляет 100% процессор в режиме ожидания

Я работаю над MDI-приложением, написанным на С++ Builder 2010. Когда дочернее окно находится в максимизированном состоянии, приложение потребляет 100% времени процессора в режиме ожидания.

Я использовал профилировщик "Very Sleepy", и он показывает, что функция Sd_childFinalize использует 99% ресурсов ЦП, но я не могу найти ее в своем коде. sd_Child.cpp - это блок С++, где определен класс дочерней формы MDI. Я нашел только @@[email protected] символ в исполняемом файле. Пожалуйста, помогите мне понять, как отладить эту проблему.

Ответ 1

Это, по-видимому, известная проблема, связанная с действиями и способ обновления в обработчике простоя приложения. Следующий отчет QC описывает ваш сценарий: http://qc.embarcadero.com/wc/qcmain.aspx?d=12706

Решение вашей проблемы, согласно отчету QC, заключается в том, чтобы установить свойство TApplication.ActionUpdateDelay на значение, большее 0.

Мне бы хотелось знать, почему присутствие максимально возможной формы клиента приводит к тому, что VCL DoActionIdle вызывается в цикле занятости. Предположительно выполнение действий обработчика OnUpdate приводит к очередному сообщению в очереди и другим простоям циклам и т.д. Я бы подумал, что это будет лучший способ решить эту проблему, но, возможно, ее трудно достичь.