freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-08 11:11 am

Общее • Re: UI в отдельном потоке

Posted by sts

WAYFARER писал(а):
Подозреваю что нет.

проблеме, а точнее задаче более 20 лет, зря разработчики так плотно сфокусировались на VCL, есть в ней ряд фундаментальных недостатков, да они нормальны для первых версий делфы, а вот потом надо было переработать.
WAYFARER писал(а):
Получается наоборот.

я под основным потоком имею ввиду APP поток в котором запускается функция MAIN. нужно чтобы в нем работала логика программы, как и сейчас, а вот для форм запускался отдельный UI поток, который является основным для UI компонент и в нем они создаются. DB компоненты работают APP потоке а визуализация в подбрасывается в UI поток.
Я делал прототип такого приложения в делфе, для этого надо разделить UI контрол на две части, первая доступна из APP потока, вторая из UI потока,в LCL разделение уже сделано, надо UI поток добавить

Статистика: Добавлено sts — 08.09.2025 11:11:31


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-08 12:42 am

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Сквозняк

RRYTY писал(а):
Вот бы воспроизводимо подтвердить. Скажем, в трех случаях с погрешностью не более (пусть будет много, для наглядности эксперимента) 10%. Берем три одинаковых флэшки, пишем, кладем рядом. Сколько ждать самостирания?


Мне подтверждение не нужно, уже сам с таким сталкивался и переход дешёвых сандисковых флешек (чёрные пластиковые усб2) в режим "только чтение", из которого даже спецутилитой не вытащить, только день зря тратится, наблюдал. Стираешь большое количество файлов или пытаешься обновить гит и всё - записать потом ничего нельзя.

В последний раз прикол с самостиранием случился недавно с флешкой микродрайв усб2 64 гб, с алика, пришла летом прошлого года:
Изображение

Multifunctional OTG Usb Flash Drive type c 32gb Pen drive 64gb 128gb флешка mobile phone usb 2.0 flash memory stick pendrive похожие на эти
https://www.aliexpress.com/item/1005006 ... in_prod%3A
только дешевле.

На одной из флешек хранил драйвера, клипы, музон и файлы, которые с компа на комп перекидывал. Знал про прикол с самостиранием, уже его проходил, но не уследил. Недавно стал с флешки в виртуалку драйвер устанавливать, а он копируется паталогически медленно, а потом при установке ошибку кидает. Нашёл на жёстком диске копию этого же драйвера, залил на флешку и нормально его установил. И оказалось что куча видео уже битая, а прошло меньше года с момента его заливки - иногда флеху подзаряжал, но график не вёл, потому не могу сказать когда случилось "чудо".

Алиса конечно чудит и не ищет то, что находила несколько месяцев назад. Но у меня ходы записаны:

Скорость потери данных на флеш-памяти зависит от типа накопителя и условий хранения:

SLC-память (Single Level Cell) сохраняет данные несколько десятков лет без питания.
MLC-память — несколько лет.
TLC-память — около полугода.
QLC-память — несколько недель.

iphones.ru
Эти сроки указаны для накопителей, которые не используются активно. При активном использовании флеш-память теряет данные быстрее, так как ячейки постоянно перезаписываются. cyberforum.rudzen.ru
Также скорость потери данных зависит от температуры: чем выше температура, тем быстрее идёт процесс. Например, при высокой температуре данные на изношенных накопителях могут храниться всего пару недель. iphones.ru
Важно учитывать, что заявленные сроки хранения данных могут варьироваться в зависимости от модели флеш-памяти и условий эксплуатации. Реальные показатели известны только производителю, а все тесты и замеры проводятся исключительно в рабочих режимах.


Ещё можно прочитать статью на швабре - https://habr.com/ru/articles/512886/
Code:
Можете смеяться, но я видел своими глазами, как разработчики флешек именно «заряжали» свои изделия, устанавливая их в зарядники на некоторое время!



Нельзя оставлять данные лежать долго в одиночестве в NAND-flash памяти, за ними надо ухаживать. А именно — периодически перезаписывать. Правильный контроллер производит периодически перечитывание данных, контроль числа битовых ошибок и перезапись данных в случае необходимости (пока число битовых ошибок не превысило допустимое). Разумеется, для этого также контроллеру необходимо «свободное время».


А сколько времени нужно чтобы обслуживать 64Гб на усб2, когда там случились какие-то проблемы - тайна великая, но точно ясно, что времени когда что-то мимоходом записывается и читается, не хватает.

Статистика: Добавлено Сквозняк — 08.09.2025 00:42:22


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-07 08:08 pm

Общее • Re: UI в отдельном потоке

Posted by WAYFARER

Подозреваю что нет. И тут скорее дело даже не в LCL, а в библиотеках виджетов. Что в windows все окна, формы и контролы WinAPI обязаны жить в том потоке, где находится message loop. Этот цикл сообщений существует только в одном потоке. Что в GTK, все вызовы GTK должны выполняться СТРОГО из главного потока.
В общем все визуальные компоненты и события живут только в главном GUI-потоке и никак иначе. Это фундаментальное нерушимое правило)))
Разве что Qt допускает несколько потоков, но виджеты жёстко привязаны к потоку где они были созданы. То есть у каждого окна есть “свой” event loop, и обращаться к нему из других потоков запрещено, так что вряд ли это тебе поможет.

Добавлено спустя 11 минут 4 секунды:
sts писал(а):
т.е. чтобы OnClick работал в основном потоке а формы рисовались в отдельном и соответственно нажатие кнопки в потоке UI пробрасывало вызов OnClick в основной.
аналогично DB компоненты работают в основном а дбгрид в UI

Получается наоборот. DB компоненты выносить в рабочие потоки. Ну или если нужна полная изоляция, то дели на два процесса (грубо говоря клиент-сервер).

Статистика: Добавлено WAYFARER — 07.09.2025 20:08:52


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-07 07:14 pm

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by WAYFARER

Снег Север писал(а):
У меня на винде другая проблема, которую я не могу решить уже давно - с какого-то момента перестают распознаваться и подключатся флешки по USB. Причем и сама флешка и разъём USB в полном порядке. Флешка распознаётся и читается без проблем на стареньком ноуте с линухом, другие устройства USB в том же разъёме тоже распознаются. Одну из самых нужных флешек удалось подключить, пошаманив в административных функциях устройств.

Подозреваю что удаление всех устройств в диспетчере в разделах "Контроллеры USB" и "Запоминающие устройства USB" с последующей перезагрузкой уже опробовано, потому остается один вариант.
Удали целиком ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumUSBSTOR , это должно помочь
И можно на всякий случай проверить службу USBSTOR (HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTOR, параметр start должен быть равен 3)

Дело в том, что в USBSTOR хранятся устаревшие или повреждённые привязки к драйверам, и Windows продолжает пытаться использовать их, вместо того чтобы создать новые.
Для каждой флешки создаётся папка в реестре в которой хранится информация для Plug&Play (какой драйвер назначен, какой том создать, какая буква диска и многое другое).
Это очень хрупкая система которая при активном использовании накопителей выходит из строя через какое то время.
А в "позорном линухе" принцип иной. В системе не хранится "паспорт" с данными флешки, при подключении устройство регистрируется каждый раз заново.

PS. PnP в Windows на мой взгляд немножко застрял в 90х годах в своем развитии, в идее постоянного хранения истории устройств. Нафига запоминать кучу ненужно информации и захламлять реестр, если для тех же флешек используется ОДИН ЕДИНСТВЕННЫЙ универсальный драйвер, а аппаратные конфликты практически невозможны? Ради удобного администрирования платить стабильностью глупо. Да и при динамической модели все это легко реализуется (например udev правилами в Linux)

Статистика: Добавлено WAYFARER — 07.09.2025 19:14:09


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-07 05:47 pm

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by RRYTY

Сквозняк писал(а):
... Скорость самостирания данных зависит от типа памяти, температуры при записи и температуры при хранении. ...


Вот бы воспроизводимо подтвердить. Скажем, в трех случаях с погрешностью не более (пусть будет много, для наглядности эксперимента) 10%. Берем три одинаковых флэшки, пишем, кладем рядом. Сколько ждать самостирания?

Статистика: Добавлено RRYTY — 07.09.2025 17:47:07


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-06 07:05 pm

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Сквозняк

Снег Север писал(а):
Не понимаю, зачем люди публично несут заведомый бред???


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

Статистика: Добавлено Сквозняк — 06.09.2025 19:05:49


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-06 07:26 am

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Снег Север

Сквозняк писал(а):
вдруг включен режим только для чтения.

Не понимаю, зачем люди публично несут заведомый бред???

Статистика: Добавлено Снег Север — 06.09.2025 07:26:19


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-05 10:57 pm

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Сквозняк

Снег Север писал(а):
От верблюда. Я же написал, что на нотбуке с позорным линухом те же флешки распознаются и читаются без проблем.


Ну да, если больной пришёл к доктору сам, то он здоров! Пусть заплатит за приём и идёт нафиг, не мешает людям работать. Замечательная логика :mrgreen:

А потом: проблем нет, проблем нет, вдруг включен режим только для чтения.

Статистика: Добавлено Сквозняк — 05.09.2025 22:57:16


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-05 06:36 pm

Общее • UI в отдельном потоке

Posted by sts

Существует ли вариант LCL или аналог работающий в отдельном потоке?
т.е. чтобы OnClick работал в основном потоке а формы рисовались в отдельном и соответственно нажатие кнопки в потоке UI пробрасывало вызов OnClick в основной.
аналогично DB компоненты работают в основном а дбгрид в UI

Статистика: Добавлено sts — 05.09.2025 18:36:09


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-05 06:53 am

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Снег Север

Сквозняк писал(а):
Откуда известно, что флешки в порядке?

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

Статистика: Добавлено Снег Север — 05.09.2025 06:53:56


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-05 05:05 am

Потрепаться • Re: Ошибка Windows 11 начала ломать SSD

Posted by Сквозняк

Откуда известно, что флешки в порядке? Флешки, это нудный хранитель данных. На них данные постоянно размываются диффузией и нужно регулярно их втыкать на много часов в гнездо с электричеством, чтобы контроллер подновил данные. Возможно, на твоих флешках уже есть критические повреждения информации, на которые линукс пока забивает, а винда на них натыкается и привет. Скорость самостирания данных зависит от типа памяти, температуры при записи и температуры при хранении. Но, поскольку неприятную информацию производители выкладывать не любят, для каждых флешек нужно узнавать частоту и длительность техработ опытным путём. А если флешек много, то подзаряжать их - просто звиздец. Желательно, чтобы кто-то выпустил компактный подзаряжатель на 10-20 флешек - подключил его к ИБП, воткнул вечером в него половину флешек, как иголки в ёжика, и пусть питаются до утра.
Но это ещё не вся беда. Контакты на флешках ненадёжные. Воткнёшь флешку на подзарядку, а контакт отойдёт, и техработы не проведутся в полном объёме.

Статистика: Добавлено Сквозняк — 05.09.2025 05:05:31


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-04 07:10 am

Free Pascal Compiler • Re: Компиляция под 32-бита из 64-битной системы

Posted by Сквозняк

Оказалась ложная тревога, компилятор древнего 32 битного лазаруса в древнем 64 битном линуксе, в виртуалке (в новом линуксе линковщик не тот, для него новый fpc нужен) нормально компилирует, несмотря на такие сообщения
Code:
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
/usr/bin/ld: skipping incompatible /usr/lib64/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib64/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib64/libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib64/libdl.a when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib64/libX11.so when searching for -lX11
/usr/bin/ld: skipping incompatible /usr/lib64/libXrandr.so when searching for -lXrandr
/usr/bin/ld: skipping incompatible /usr/lib64/libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /usr/lib64/libGLU.so when searching for -lGLU
/usr/bin/ld: skipping incompatible /usr/lib64/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib64/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib64/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib64/libz.a when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib64/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib64/libc.a when searching for -lc

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

Статистика: Добавлено Сквозняк — 04.09.2025 07:10:44


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-01 02:23 pm

Lazarus • Re: Ошибки нет в одной версии Lazarus, но есть в другой.

Posted by mike

Скорее всего в 2.2.6 или срабатывает какой-то лишний $IFDEF, или наоборот, не срабатывает нужный, в результате компилируется код, предназначенный для другой версии (или для Delphi).

Статистика: Добавлено mike — 01.09.2025 14:23:56


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-01 10:07 am

Lazarus • Re: Ошибка: не найден system.ppu.

Posted by jsa

На новом установленном Lazarus 4.2.0 проблема повторилась
Вот нашел как решил ее в прошлый раз https://bugzilla.altlinux.org/25991


NotHAM 2013-03-14 14:43:24 MSK

Эта ошибка будет актуальна и Лазарусе 1.0.6.
Обойти ее очень просто (по кр. мере у меня сработало).
1. Сначала, когда не находит system.ppu, проигнорировать и запустить IDE.
2. В запущеной IDE в меню "Сервис" кликнуть на пункте "Пересмотреть каталог
исходного кода FPC". После чего можно перезапустить Лазаря.

Никакой Check your fpc.cfg не требуется. Оно само всё прочекит. :)

У меня после проделанного ругань пропадала навсегда и в 1.0.4 и в 1.0.6.
И вообще это, похоже, микроскопический глючок, который ничему не
мешает.
Вполне достаточно отразить это в документации.
Как было в 0.9.30 - уже не помню.

Статистика: Добавлено jsa — 01.09.2025 10:07:57


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-01 09:33 am

Lazarus • Re: аналог xmldoc.FormatXMLData существует?

Posted by jsa

sts писал(а):
https://forum.lazarus.freepascal.org/index.php?topic=22159.0

?

Спасибо посмотрю.

Статистика: Добавлено jsa — 01.09.2025 09:33:16


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-01 09:30 am

Lazarus • Ошибки нет в одной версии Lazarus, но есть в другой.

Posted by jsa

Здравствуйте.

Странная ситуация наблюдается.
Есть паралельно в соседние папки установленные Lazarus 2.0.8, 2.2.6 и недавно поставил посмотреть что нового 4.2.0
В целом работают нормально.

Но недавно открыл один старый проект случайно не в 2.0.8, а в 2.2.6
При компиляции он зачем-то подтягивает модуль IdHL7 (в проекте его не использую) и выдает ошибку
Code:
IdHL7.pas(935,7) Error: Incompatible type for arg no. 2: Got "Class Of IIdQueuedMessage", expected "TClass"


в процедуре

Code:
procedure TIdHL7.PreStop;

  procedure JoltList(list: TInterfaceList);
  var
    i: Integer;
  begin
    for i := 0 to list.Count - 1 do
    begin
==>>     IIdQueuedMessage(list[i]).SetEvent;
    end;
  end;   
...

Если открыть проект в 2.0.8 то там компилируется нормально.

2.0.8 установлен indylaz.lpk 10.6.2.5451
2.2.6 установлен indylaz.lpk 10.6.3.11 (обновил через сетевой диспетчер пакетов надеясь исправить ошибку. Какая версия была до этого не помню, может быть такая же 10.6.2.** но на ней тоже ошибка воспроизводилась)

-----------

Вот что не понятно.
1. Зачем подтягивается модуль IdHL7 в версии 2.2.6 если он был не нужен в 2.0.8?
2. какая методика в Lazarus для вычисления что именно использует этот модуль и классы из него. Как это определить?
3. И что можно сделать с этой ошибкой?

Статистика: Добавлено jsa — 01.09.2025 09:30:09


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-09-01 01:20 am

RxLib • Re: Фильтр в RxDBGrid

Posted by Sharfik

А есть механизм сброса быстрых фильтров? Или только через "колхозить"?

Code:
procedure TFModuleContracts.actGridClearFilterExecute(Sender: TObject);
var
  i:integer;
begin
   for i:=0 to RxDBGrid1.Columns.Count-1 do
   begin
     RxDBGrid1.Columns.Items[i].Filter.ClearFilter;
     RxDBGrid1.Columns.Items[i].Filter.State:=rxfsAll;
   end;

   RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx-[rdgFilter];
   RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx+[rdgFilter];

end;

Статистика: Добавлено Sharfik — 01.09.2025 01:20:50


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-08-29 03:22 pm

Разное • Re: OpenXR для FPC

Posted by Alex2013

Кстати недавно нашел OpenXR для Android (на quest и pico )
Сама библиотека libopenxr_loader.so
https://github.com/lovr-org/ovr_openxr_ ... ree/master

и Oculus Mobile SDK (С++) с примерами использования
https://github.com/lovr-org/ovr_sdk_mobile

Вопрос как-бы ее в Лазарус транслировать?
Зы
Еще пытаюсь обойти SteamVR для более простого использования PCVR (через VDXR) пока не получается .

Статистика: Добавлено Alex2013 — 29.08.2025 15:22:41


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-08-27 03:25 pm

Lazarus • Re: class procedure в качестве TNotifyEvent

Posted by mike

sts писал(а):
чтобы это работало надо по разному формировать ссылку на метод и это случайно не получится

Вот из исходников самого Лазаруса фрагмент, файл colortty.pas:
Code:
type
  TColorTTY = class
    class procedure DoLazLoggerDebugLnEx({%H-}Sender: TObject; var LogTxt, {%H-}LogIndent: string;
      var {%H-}Handled: Boolean; const AnInfo: TLazLoggerWriteExEventInfo);
  end;

class procedure TColorTTY.DoLazLoggerDebugLnEx(Sender: TObject; var LogTxt, LogIndent: string;
  var Handled: Boolean; const AnInfo: TLazLoggerWriteExEventInfo);
var
  ...
begin
  ...
end;

initialization
  DebugLogger.OnDebugLnEx := @TColorTTY.DoLazLoggerDebugLnEx;
end.

Где:
Code:
TLazLoggerWriteExEvent = procedure(Sender: TObject; var LogTxt, LogIndent: string; var Handled: Boolean; const AnInfo: TLazLoggerWriteExEventInfo) of object;
...
property  OnDebugLnEx: TLazLoggerWriteExEvent


И такое там не в одном месте. В стандрантных библиотеках Delphi тоже попадается, откуда я данный прием и взял в свое время.

Статистика: Добавлено mike — 27.08.2025 15:25:43


freepascal.ru ([syndicated profile] freepascal_ru_feed) wrote2025-08-27 02:11 pm

Lazarus • Re: class procedure в качестве TNotifyEvent

Posted by sts

я думаю тут проблема в чемто другом, в делфе предусмотрена поддержка procedure of object и для class procedure, т.е. чтобы это работало надо по разному формировать ссылку на метод и это случайно не получится. в fpc должно быть также, смущает @, может нужен режим делфи чтоб также работало?

Статистика: Добавлено sts — 27.08.2025 14:11:12