Size: a a a

2020 April 10

W

Wlad in Delphi & Lazarus
Alex Wow
Вопрос встал ,как обойти application.processmesseges .
Кто сталкивался тот поймет ,пробовал через синхронизацию потоков и через таймер vcl ,чёт не получилось или я криворукий.Процедурка vcl. апдейт работает,но фокус убрать -лагает
В чём задача состоит? И почему вы так рассержены на processmessages?
источник

AW

Alex Wow in Delphi & Lazarus
Задача стоит чтобы отображать то что зацикленно ,я избавляюсь от костылей ,и делаю всё адекватно ,чтобы я не ловил множество багов. Потому что проект не хеллоу Ворд .
источник

AW

Alex Wow in Delphi & Lazarus
Вкинул холивар ,но мне нужен просто ответ ,если он есть .
источник

AW

Alex Wow in Delphi & Lazarus
(:
источник

W

Wlad in Delphi & Lazarus
Например, у меня была задача долгой загрузки/предобработки огромного файла. Это делалось в отдельном потоке
Время от времени, из реакции на таймер, в основном потоке вызывалось то самое processmessages из колбэка на таймер. Там вычислялся процент загруженной инфы из файла и отображалось на форме. Там же проверялось не было ли команды на досрочное прерывание считывания файла и поток загрузки мог быть убит.
источник

AW

Alex Wow in Delphi & Lazarus
В потоке не визуальном нельзя использовать эту процедуру,нужно делать синхронайз
источник

АВ

Александр В in Delphi & Lazarus
Alex Wow
В потоке не визуальном нельзя использовать эту процедуру,нужно делать синхронайз
https://github.com/CynicRus/SimpleCDRipper/blob/master/src/uwthread.pas - как вариант сделать вот так. Следовательно, на форме бросить невидимую панель, которую показывать при обработке.
источник

АВ

Александр В in Delphi & Lazarus
Таким макаром я уже давным давно делаю всякую длительную обработку всяких данных.
источник

AW

Alex Wow in Delphi & Lazarus
Отдуши душевно в душу ,почитаю
источник

AW

Alex Wow in Delphi & Lazarus
Когда буду визуалку делать
источник

VA

Viktor Akselrod in Delphi & Lazarus
Александр В
https://github.com/CynicRus/SimpleCDRipper/blob/master/src/uwthread.pas - как вариант сделать вот так. Следовательно, на форме бросить невидимую панель, которую показывать при обработке.
   Synchronize(@TrackProgressBar.Free);
   Synchronize(@OverallProgressBar.Free);


это вообще что такое?...
источник

АВ

Александр В in Delphi & Lazarus
М-м-м-м. Синхронизация освобождения компонентов, которые созданы в потоке но расположены на панели в главном потоке
источник

VA

Viktor Akselrod in Delphi & Lazarus
код мягко говоря интересный
источник

АВ

Александр В in Delphi & Lazarus
О, и правда уже починили. Эта синхронизация была запилена во времена, когда без неё был sigsegv. Пару версий назад
источник

АВ

Александр В in Delphi & Lazarus
А таки что не так? Я всегда за разумную критику
источник

VA

Viktor Akselrod in Delphi & Lazarus
если по критике - то визуальные компоненты не должны ни создаваться, ни изменяться в доп потоках
почему лейбл разрушается без синхронизации, а остальные компоненты с синхронизацией (вообще в целом странное решение)?
судя по названию Synchronize(@DoWork); подразумевает полезную нагрузку. тогда получается смысл потока убивается напрочь
по стилю: зачем там указатели, собаки, self?
источник

АВ

Александр В in Delphi & Lazarus
Ну....зачем там нужен DoWork? Собственно наследуешься, переопределяешь DoWork. Там полезная нагрузка. Например: https://github.com/CynicRus/SimpleCDRipper/blob/master/src/uextractor.pas
источник

АВ

Александр В in Delphi & Lazarus
На форме пустая панель, ну и разве передача по указателю не быстрее работает?-))
источник

VA

Viktor Akselrod in Delphi & Lazarus
Александр В
Ну....зачем там нужен DoWork? Собственно наследуешься, переопределяешь DoWork. Там полезная нагрузка. Например: https://github.com/CynicRus/SimpleCDRipper/blob/master/src/uextractor.pas
получается создаем поток, чтобы работу выполнять в главном потоке.
в чем смысл потока?
источник

VA

Viktor Akselrod in Delphi & Lazarus
Александр В
На форме пустая панель, ну и разве передача по указателю не быстрее работает?-))
быстрее по сравнению с чем? инстанс по факту и есть ссылка. зачем еще одна ссылка?
источник