Обновить

Исследовал тут проблему завершения программы при завершении сессии винды в FMX.
При таком сценарии происходит утечка памяти, т.к. Application не освобождается при завершении программы.
Проблема это не большая и ни на что не влияет. Но, помимо этого тут затронут момент сохранения пользовательских данных при завершении программы.
Как вы могли заметить, если программа убивается, например, Андроидом, когда он решил, что она давно не используется, то событий закрытия или уничтожения формы не происходит.

Я нашёл интересное событие у формы, но в первую очередь, я увидел, что в FMX, в отличии от VCL, по умолчанию обрабатывается событие WM_ENDSESSION и WM_QUERYENDSESSION, которые мы обычно в VCL обрабатывали вручную у формы через message. Так вот, WM_QUERYENDSESSION по-умолчанию разрешает завершение программы, а вот WM_ENDSESSION, который происходит после этого события генерирует событие у формы под названием OnSaveState.

Так что, я рекомендую все сохранения настроек или других данных пихать именно туда.

Модуль FMX.Platform.Win.pas
Модуль FMX.Platform.Win.pas

О самой проблеме с утечкой. Её я тоже решил. Косяк в том, что при WM_ENDSESSION происходит завершение программы изнутри процедуры обработки сообщений, что в свою очередь приводит к задержанию в памяти Application.
Всему виной строка Halt (3-я снизу).

Решается это просто, если взять на себя модуль FMX.Platform.Win.pas и изменить немного этот код. Нужно Halt вызвать через очередь сообщений.

Application.Terminate;
TThread.ForceQueue(nil,
procedure
begin
Halt;
end);

Всего голосов 9: ↑9 и ↓0+9
Комментарии1

Представлен открытый минималистичный браузер Northstar, написанный полностью с нуля на языке C

Представлен открытый минималистичный браузер Northstar, написанный полностью с нуля на языке C. Одно окно, одна страница, один процесс — около 170 000 строк оригинального кода на C. В проекте не используется сторонний движок: ни Gecko, ни WebKit, ни Blink. Это свободное программное обеспечение, распространяемое на условиях лицензии GNU General Public License v3.0.

Представлен открытый минималистичный браузер Northstar, написанный полностью с нуля на языке C

Публикации