Size: a a a

2020 December 01

GB

George Bakhtadze in Delphi & Lazarus
Сергей Пятыгин
Спасибо, этот алгоритм понятен. Создал структура в гуи. Создал структуру в потоке. Они не зависимы друг от друга. Скопировал Структуру из гуи в структуру потока и работаешь с ними отдельно.
Но Виктор предложил другой вариант:
1) передать эти объекты как есть
2) делегировать создание/разрушение этих объектов потоку
Miss так не стоит делать из-за RAII или не верно интерпретировал?
создание и разрушение объекта лучше делать на одном уровне. так удобнее читать программу и меньше вероятность допустить ошибку с этим
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Те самый оптимальный вариант пока-это Ассижн?
источник

GB

George Bakhtadze in Delphi & Lazarus
если я правильно понял, что ты передаешь в поток данные для расчетов, то самый оптимальный в данном случае будет передача рекордами, вместо классов
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
George Bakhtadze
если я правильно понял, что ты передаешь в поток данные для расчетов, то самый оптимальный в данном случае будет передача рекордами, вместо классов
Да, все верно, и это было бы очень удобно и оптимальней, но среди данных в классе есть ТЛист, очень удобно его создавать/разрушать в классе. Пока не искал хорошо как это реализовать, хотя @zamtmn мне приводил пример как создать в записи ТЛист и я напрасно им пренебрег.
источник

z

zamtmn in Delphi & Lazarus
но я же тебя предупреждал что классы внутри записи небудут скопированы
источник

GB

George Bakhtadze in Delphi & Lazarus
Сергей Пятыгин
Да, все верно, и это было бы очень удобно и оптимальней, но среди данных в классе есть ТЛист, очень удобно его создавать/разрушать в классе. Пока не искал хорошо как это реализовать, хотя @zamtmn мне приводил пример как создать в записи ТЛист и я напрасно им пренебрег.
не, если в записи с данными есть динамическая составляющая, то удобство рекордов пропадает - будет ссылка на эту самую составляющую и она доставит проблем
источник

Miss Очепятка... in Delphi & Lazarus
Сергей Пятыгин
Спасибо, этот алгоритм понятен. Создал структура в гуи. Создал структуру в потоке. Они не зависимы друг от друга. Скопировал Структуру из гуи в структуру потока и работаешь с ними отдельно.
Но Виктор предложил другой вариант:
1) передать эти объекты как есть
2) делегировать создание/разрушение этих объектов потоку
Miss так не стоит делать из-за RAII или не верно интерпретировал?
RAII гласит кто создал объект тот его и должен уничтожить.  Либо это будет форма либо вы делегируете потоку.
источник

GB

George Bakhtadze in Delphi & Lazarus
Miss Очепятка
RAII гласит кто создал объект тот его и должен уничтожить.  Либо это будет форма либо вы делегируете потоку.
RAII оно про управление ресурсами больше, нежели про создание/уничтожение
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
George Bakhtadze
не, если в записи с данными есть динамическая составляющая, то удобство рекордов пропадает - будет ссылка на эту самую составляющую и она доставит проблем
Понятно, те если рекорд содержит класс, то не получиться его передать
источник

Miss Очепятка... in Delphi & Lazarus
George Bakhtadze
RAII оно про управление ресурсами больше, нежели про создание/уничтожение
Память это ресурс который выделяет и освобождается при создании и удаление объекта. Что никак не влияет на дефрагментацию. Поэтому считаю что про ресурсы RAII в меньшую сторону.
источник

GB

George Bakhtadze in Delphi & Lazarus
Сергей Пятыгин
Понятно, те если рекорд содержит класс, то не получиться его передать
получится, просто передача усложняется. если возможно, попробуй заменить TList на статический массив
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
George Bakhtadze
получится, просто передача усложняется. если возможно, попробуй заменить TList на статический массив
А если статический массив будет от 0 до MaxInt? :)
источник

GB

George Bakhtadze in Delphi & Lazarus
Сергей Пятыгин
А если статический массив будет от 0 до MaxInt? :)
стек не выдержит
источник

Miss Очепятка... in Delphi & Lazarus
Сергей Пятыгин
Понятно, те если рекорд содержит класс, то не получиться его передать
Получиться он передаться по ссылке.  Проблема в том что  тогда формально потока безопасность нарушится.  Правда можно разработать компенсационные меры.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Сергей  я посмотрел главный твой главный модуль. если на данном этапе тяжело это выделить в отдельный некий "контроллер", то есть вариант проще:
объекты TGetSystemMagnetic, TSM и тд вообще не обязательно разрушать и создавать на каждый расчет.
их можно создать единожды при старте программы и разрушить при завершении программы.
единственное что надо сделать - это защитить их любым способом от совместного изменения в один момент времени из главного и вторичного потоков.
результат вычислений ты можешь забирать по событие TThread.OnTerminate, который отрабатывает в главном потоке, так что там ты спокойно можешь выводить данные в ГУИ
источник

A

Alex in Delphi & Lazarus
Хочу прогу в System Tray послать, в какой метод этот код вставлять?   WindowState:=wsMinimized;
 Hide;
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alex
Хочу прогу в System Tray послать, в какой метод этот код вставлять?   WindowState:=wsMinimized;
 Hide;
Есть LCL компонент для этого. TTrayIcon
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alex
Хочу прогу в System Tray послать, в какой метод этот код вставлять?   WindowState:=wsMinimized;
 Hide;
А так да. Чтобы скрыть основное окно можно использовать Hide
источник

MS

Mr Smith in Delphi & Lazarus
Alex
Хочу прогу в System Tray послать, в какой метод этот код вставлять?   WindowState:=wsMinimized;
 Hide;
Application.ShowMainForm := false - кажись так в модуле основного проекта
источник

A

Alex in Delphi & Lazarus
Renat Suleymanov
Есть LCL компонент для этого. TTrayIcon
Да, уже все сделал. Но когда прогу закрываю она в tray не идет.
источник