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


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

Я использовал "очень сонный" профилировщик, и он показывает, что функция Sd_childFinalize использует 99% ресурсов процессора, но я не могу найти его в своем коде. sd_Child.cpp-это блок C++, в котором определен класс дочерней формы MDI. Я нашел только символ @@Sd_child@Finalize в исполняемом файле. Пожалуйста, помогите мне понять, как отладить эту проблему.

1 10

1 ответ:

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

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

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