Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблемы с FMX-приложениями и IDE Delphi после длительной работы Windows 11

Delphi , Программа и Интерфейс , Приложение своё

 

В последнее время пользователи Delphi сталкиваются с интересной проблемой, связанной с запуском FMX-приложений и работы IDE Delphi на операционной системе Windows 11. Приложения на основе FMX (FireMonkey) могут "зависать" при старте после длительной работы системы (несколько часов). В то же время, VCL-приложения продолжают работать нормально. В этой статье мы рассмотрим возможные причины этой проблемы и предложим несколько решений, которые могут помочь устранить её.

Описание проблемы

Пользователь wqmeng столкнулся с тем, что его FMX-приложение «зависает» при старте после длительной работы Windows 11 (несколько часов). При этом другие приложения, включая VCL-приложения, продолжают работать нормально. В дополнение к этому, IDE Delphi также сталкивается с рядом проблем:

  • Формы FMX в дизайнере IDE не загружаются.
  • Панель объектов и свойства элементов формы не отображаются.
  • Попап-меню IDE не отображаются или не реагируют на нажатия мыши.
  • Всплывающие диалоговые окна IDE не принимают нажатия мыши.
  • Список элементов в ListBox не отображается, а чекбоксы остаются белыми, без текста.

Однако, если попробовать запустить приложение несколько раз, после нескольких попыток (5-20) оно может запуститься без изменений в системе. Также отмечается, что проблема может исчезнуть после перезагрузки системы, но возникает снова после нескольких часов работы.

Причины проблемы

Проблема связана с использованием GPU-ресурсов FMX-приложениями, включая дизайн в IDE Delphi. FMX-приложения используют Direct3D для отрисовки интерфейсов, что может вызывать конфликты с другими приложениями или системными компонентами, использующими те же ресурсы. В частности, приложение не может получить доступ к объекту DirectX SharedMultithread, что приводит к зависанию при старте.

Анализ кода

Вот пример кода, который может быть связан с этой проблемой:

class procedure TCanvasD2D.CreateSharedResources;
var
  Prop: TD2D1RenderTargetProperties;
  Desc: TD3D10_Texture2DDesc;
begin
  inherited;
  if (FSharedMultithread = nil) and not Succeeded(SharedFactory.QueryInterface(IID_ID2D1Multithread, FSharedMultithread)) then
    FSharedMultithread := nil;

  MultithreadEnter;
  try
    if FSharedRenderTarget = nil then
    begin
      FillChar(Desc, SizeOf(D3D10_TEXTURE2D_DESC), 0);
      Desc.Format := DXGI_FORMAT_B8G8R8A8_UNORM;
      Desc.Width := 1;
      Desc.Height := 1;
      Desc.MipLevels := 1;
      Desc.ArraySize := 1;
      Desc.SampleDesc.Count := 1;
      Desc.SampleDesc.Quality := 0;
      Desc.Usage := D3D10_USAGE_DEFAULT;
      Desc.BindFlags := D3D10_BIND_RENDER_TARGET or D3D10_BIND_SHADER_RESOURCE;

      if Failed(SharedDevice.CreateTexture2D(Desc, nil, FSharedTexture)) then
        raise ECannotCreateTexture.CreateFmt(SCannotCreateTexture, [ClassName]);

      Prop := D2D1RenderTargetProperties(DefaultRenderTargetMode, D2D1PixelFormat(DXGI_FORMAT_UNKNOWN,
        D2D1_ALPHA_MODE_PREMULTIPLIED));

      if Failed(SharedFactory.CreateDxgiSurfaceRenderTarget(FSharedTexture as IDXGISurface, Prop,
        FSharedRenderTarget)) then
        raise ECannotCreateRenderTarget.CreateFmt(SCannotCreateRenderTarget, [ClassName]);
    end;
  finally
    MultithreadLeave;
  end;
end;

В этом коде приложение пытается получить интерфейс IID_ID2D1Multithread, но это не удается, что приводит к зависанию при старте.

Решения проблемы

1. Обновление графических драйверов

Одним из возможных решений является обновление графических драйверов. Проблема может быть связана с устаревшими или некорректно установленными драйверами. Попробуйте обновить драйверы до последней версии, используя чистую установку из пакета драйверов.

# Пример команды для обновления драйверов
nvidia-smi

2. Перезагрузка графических драйверов без перезагрузки системы

Если перезагрузка системы не является желательным решением, можно попробовать перезагрузить графические драйверы без перезагрузки системы. Для этого можно использовать комбинацию клавиш Win + Ctrl + Shift + B. Это сбросит графические драйверы и может помочь устранить зависание.

# Команда для сброса графических драйверов
rundll32.exe user32.dll, LockWorkStation

3. Перезагрузка сеанса Windows

Если перезагрузка графических драйверов не помогает, можно попробовать перезагрузить сеанс Windows. Для этого можно выйти из системы и снова войти. Это может сбросить состояние системы и устранить зависание.

# Команда для выхода из системы
shutdown /l

4. Проверка на наличие антивирусных программ

Некоторые антивирусные программы могут блокировать доступ к GPU-ресурсам, что может привести к зависанию FMX-приложений. Попробуйте временно отключить антивирусные программы и проверить, решается ли проблема.

5. Обновление Delphi и FMX

Попробуйте обновить Delphi и FMX до последней версии. Возможно, проблема связана с устаревшей версией Delphi или FMX, и обновление может устранить её.

6. Использование VCL-приложений

Если FMX-приложения продолжают зависать, можно попробовать переписать приложение на основе VCL. VCL не использует GPU-ресурсы и, следовательно, не сталкивается с теми же проблемами, что и FMX.

7. Отладка приложения

Если проблема продолжает возникать, попробуйте отладить приложение и выяснить, на каком этапе оно зависает. Это может помочь определить причину проблемы и найти решение.

procedure TForm1.FormCreate(Sender: TObject);
begin
  try
    // Ваш код
  except
    on E: Exception do
      Memo1.Lines.Add(E.Message);
  end;
end;

Заключение

Проблемы с зависанием FMX-приложений и IDE Delphi после длительной работы Windows 11 могут быть вызваны рядом причин, включая устаревшие графические драйверы, конфликты с другими приложениями и антивирусными программами. Решение проблемы может варьироваться в зависимости от конкретной ситуации, но наиболее вероятные решения включают обновление драйверов, перезагрузку сеанса Windows и использование VCL-приложений вместо FMX.

Создано по материалам из источника по ссылке.

Статья описывает проблему, с которой сталкиваются пользователи Delphi на Windows 11, когда FMX-приложения и IDE Delphi "зависают" после длительной работы системы, предлагая возможные причины и решения, связанные с использованием GPU-ресурсов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 07:45:43/0.0063800811767578/0