При обслуживании старого продукта я столкнулся с ошибкой, которая приводит к тому, что на экране появляются сотни окон с сообщениями «C ++ Exception» и ничего больше.Я проследил проблему до следующей строки:
Application->ProcessMessages();
Я понимаю цель этой строки, чтобы обработать все сообщения в очереди сообщений, но я не уверен, что является причиной ошибки.
Я не ищу конкретного решения, но мне интересно, если кто-то еще имел эту проблему или может знать, какие ситуации могут вызвать это.
Закрытие всех окон сообщений вызываетприложение, чтобы вернуться к нормальному, ожидаемому поведению.
Обновление - После дополнительного поиска я обнаружил, что ошибки не обязательно являются ошибкой ProcessMessages.Ошибки возникают из-за того, что программа выполняет интенсивные вычисления и фактически не хватает памяти.Кажется, что комментирование ProcessMessages сокращает потребление памяти настолько, чтобы пройти вычисления без ошибок.Следовательно, ProcessMessages выглядит как виновник, но на самом деле это не так.
Похоже, у меня есть какой-то рефакторинг.
Обновление 2 - Три дня спустя,Я пришел к выводу, что ошибка происходит только при вызове ProcessMessages.Если я прокомментирую все вызовы ProcessMessages (и, к моему ужасу, их много), то приложение будет работать нормально с постоянным потреблением памяти, подразумевая, что интенсивные вычисления не высасывают память.Раскомментирование вызова снова приводит к стремительному увеличению памяти.Таким образом, возникает первоначальный вопрос: почему ProcessMessages вызывает эту ошибку?
Может показаться, что некоторые вызовы выполняются из события таймера, а другие - из основного приложения.Может ли это быть проблемой?