Перейти к содержанию
Fire Monkey от А до Я

Евгений Корепов

Пользователи
  • Постов

    738
  • Зарегистрирован

  • Посещение

  • Победитель дней

    100

Евгений Корепов стал победителем дня 9 сентября 2023

Евгений Корепов имел наиболее популярный контент!

3 Подписчика

Информация о Евгений Корепов

  • День рождения 22 июля

Информация

  • Пол
    Мужчина
  • Город
    Ухта

Посетители профиля

21 899 просмотров профиля
  1. Добавлю - если у вас цель экономия трафика через мобильные сети, то вы можете использовать https://docwiki.embarcadero.com/Libraries/Sydney/en/System.ZLib.TZCompressionStream для сжатия данных перед передачей.
  2. Вы ошибаетесь. TZipFile отлично работает с TStream и остальными TMemoryStream, TFileStream и т.д. Вот пример: uses System.Zip; .... procedure TForm1.Test(); var FZip : TZipFile; AArchiveStream : TStream; AFileStreamSource : TStream; ADecompressionStream, AFileStreamDest : TStream; ALocalHeader : TZipHeader; AArchivePath, AFileSourcePath, AFileName : String; begin AArchivePath := 'D:\0\005\test.zip'; AFileSourcePath := 'D:\0\005\test.txt'; AFileName := TPath.GetFileName(AFileSourcePath); // Добавляем в архив AFileStreamSource := TFileStream.Create('D:\0\005\test.txt', fmOpenRead); AArchiveStream := TFileStream.Create(AArchivePath, fmCreate); FZip := TZipFile.Create; FZip.Open(AArchiveStream, TZipMode.zmWrite); FZip.Add(AFileStreamSource, AFileName, TZipCompression.zcDeflate); FZip.Close; FZip.Free; AArchiveStream.Free; // распаковываем из архива FZip := TZipFile.Create; AArchiveStream := TFileStream.Create(AArchivePath, fmOpenRead or fmShareDenyNone); FZip.Open(AArchiveStream, TZipMode.zmRead); FZip.Read(AFileName, ADecompressionStream, ALocalHeader); AFileStreamDest := TFileStream.Create('D:\0\005\test_dest.txt', fmCreate); AFileStreamDest.CopyFrom(ADecompressionStream, ADecompressionStream.Size); AFileStreamDest.Free; ADecompressionStream.Free; FZip.Close; FZip.Free; AArchiveStream.Free; end; В примере берем файл D:\0\005\test.txt и архивируем его в архив 'D:\0\005\test.zip. Потом достаем из этого архива файл test.txt и сохраняем как D:\0\005\test_dest.txt. Все через потоки. Код написан на коленке, при использовании в реальной задаче вам нужно добавить критические секции и обработчики try finally. Кстати вы можете использовать и сжатие BZIP2. В данном примере замените TZipCompression.zcDeflate на TZipCompression.zcBZIP2, ну и самое интересное для разработчика - напишите свою реализацию алгоритма архивирования и зарегистрируйте ее с помощью FZip.RegisterCompressionHandler(TZipCompression.zcBZIP2, .....); Да, это будет не просто, но опыта наберетесь с лихвой.
  3. Разобрался с помощью коллег из https://t.me/fmx_flood, спасибо kami! Определение: nvmlDeviceGetHandleByPciBusId_v2 : function (const pciBusId : PAnsiChar; pHandle: p_nvmlDevice_t) : nvmlReturn_t; stdcall; Импорт: function ProcNV(var Fun: Pointer; const FunName: WideString) : boolean; begin Fun := nil; Fun := GetProcAddress(LibHandleNV, PWideChar(FunName)); Result := Assigned(Fun); end; ... ProcNV(@nvmlDeviceGetHandleByPciBusId_v2, 'nvmlDeviceGetHandleByPciBusId_v2'); Использование: В функцию GPUusageNVIDIA надо вместо GPU ID передавать PCI BUS ID. PCI BUS ID получаем так clStatus := clGetDeviceInfo(PlatformDevices[DevN], CL_DEVICE_PCI_BUS_ID_NV, SizeOf(AValueCardinal), @AValueCardinal, @Returned_Size); if (clStatus = CL_SUCCESS) and (Returned_Size = 4) then ADevicesOpenCL[NumDevicesOpenCL].DevicePCIBusID := AValueCardinal; Ну и получение GPU_Handle : var ABusIDText : String; ... ABusIDText := '00000000:' + PCIBusID.ToString.PadLeft(2, '0') + ':00.0'; AnvmlReturn := nvmlDeviceGetHandleByPciBusId_v2(PAnsiChar(AnsiString(ABusIDText)), @GPU_Handle); If AnvmlReturn <> 0 then raise EAbort.Create(''); В nvmlDeviceGetHandleByPciBusId_v2 передается pciBusId, параметр должен быть вида domain:bus:device.function, к примеру '00000000:08:00.0'
  4. Владимир огромное спасибо! Ваш код очень помог мне в одном проекте. А есть ли путь для решения проблемы не совпадения нумерации GPU? У меня на разных стендах абсолютно разные результаты, каждый раз создавать SlotGPU.txt с соответствиями очень не хочется. Бывает что нумерации совсем безумные, типа 4 5 2 3 1 0 И определить их можно только нагружая один из GPU и наблюдая результат выдаваемый nvmlDeviceGetMemoryInfo Я пытаюсь определить соответствие получая CL_DEVICE_PCI_BUS_ID_NV и CL_DEVICE_PCI_SLOT_ID_NV PlatformID 0 | DeviceID 0 | DeviceNum 0 | PCI Bus 5 Slot 0 | NVIDIA GeForce RTX 3070 | GPU_usage 11 % | Temperature 51 | FanSpeed 40 % | Power 41 PlatformID 0 | DeviceID 1 | DeviceNum 1 | PCI Bus 7 Slot 0 | NVIDIA GeForce RTX 3070 | GPU_usage 100 % | Temperature 76 | FanSpeed 82 % | Power 239 PlatformID 0 | DeviceID 2 | DeviceNum 2 | PCI Bus 3 Slot 0 | NVIDIA GeForce RTX 2070 SUPER | GPU_usage 100 % | Temperature 62 | FanSpeed 71 % | Power 148 PlatformID 0 | DeviceID 3 | DeviceNum 3 | PCI Bus 2 Slot 0 | NVIDIA GeForce GTX 960 | GPU_usage 100 % | Temperature 63 | FanSpeed 72 % | Power 148 Но у меня не хватает мозгов правильно импортировать функцию nvmlDeviceGetHandleByPciBusId_v2 ( const char* pciBusId, nvmlDevice_t* device )(https://docs.nvidia.com/deploy/nvml-api/group__nvmlDeviceQueries.html#group__nvmlDeviceQueries) То ли я параметры не правильно перевожу в pascal, то ли еще что - при вызове получаю только NVML_ERROR_INVALID_ARGUMENT Буду безмерно благодарен за помощь! )
  5. Светить портом базы данных в интернет - худшая идея.
  6. Этот текст гугль находит по многим ресурсам с апреля 2020, думаю они или нашли уже себе разработчика, или забили на проект )
  7. Не совсем понял ваш вопрос, что именно вам требуется получить? Скажите, тогда смогу посоветовать как или в какой реализации браузера это доступно.
  8. FireDAC, он из коробки, бесплатно и покрывает 99% всех нужд. И отлично работает.
  9. Если проект был сохранен в редакции не имеющей лицензии Linux, то вы никак не сможете добавить платформу Linux. Сам работаю дома на профе и у заказчика на энтерпрайзе и бесит эта хрень. Выход - удалите в проекте .dproj файл и откройте его в энтерпрайзе, добавьте платформу, сохраните и скопируйте файл .dproj в отдельную папку. Если проект был изменен и сохранен в профе, заменяйте .dproj на сохраненный.
  10. Ширина задана в исходных кодах константой.
  11. Да, используйте поиск по этому форуму по Admob. Вот к примеру один из результатов поиска
  12. Не используйте первую попавшуюся, используйте нормальные дистрибутивы. Но если даже у вас настолько странная ОС, то всегда можете анализировать dmesg
  13. Выполняете любимую консольную команду выводящую сведения о железе (к примеру lspci -v) и парсите вывод.
  14. https://unix.stackexchange.com/questions/58846/viewing-linux-library-executable-version-info
  15. В Линуксе просто нет никаких стандартов для размещения версии внутри бинарника. Ембаркадера об этом не в курсе, но по привычке воткнула пустую заглушку ))) Забейте, и просто делайте свою константу с версией.
×
×
  • Создать...