Ivan B.
-
Постов
22 -
Зарегистрирован
-
Посещение
Активность репутации
-
Ivan B. отреагировална ENERGY в Индикатор замирает во время создания объектов в ScrollBox'е
Лучше не наследоваться в отдельный класс от TThread, как это делалось раньше в Delphi.
Это громоздкий и запутанный код.
Лучше используйте анонимные потоки. Вот вам шаблон:
http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
TThread.CreateAnonymousThread( procedure begin // выполняется в потоке TThread.Queue(nil, procedure begin /// выполняется в главном потоке, когда завершиться анонимный поток. end); end ).Start; procedure TForm5.Button3Click(Sender: TObject); begin TThread.CreateAnonymousThread(procedure () begin // выполняется в потоке TThread.Synchronize (TThread.CurrentThread, procedure () begin // выполняется в главном потоке, но при этом анонимный поток еще продолжит работать, но сейчас приостановлен end); end).Start; end;
И помните что с элементами GUI нельзя работать из другого потока, только из главного ( TThread.Queue, TThread.Synchronize). Иначе будет Access Violation, который будет выскакивать случайным образом.
-
Ivan B. отреагировална krapotkin в Индикатор замирает во время создания объектов в ScrollBox'е
Это для совсем простеньких случаев, когда классу потока не нужны поля, методы и все такое. TTask.Run ничем не отличается от этого
А для более продуманных вещей потомки TThread по-прежнему рулят
-
Ivan B. отреагировална Alex7wrt в Индикатор замирает во время создания объектов в ScrollBox'е
Дело в том, что индикатор отрисовывается в основном потоке. По видимому ваша процедура также выполняется в основном потоке. Чтобы не было подтормаживаний, выполняйте фоновые операции в отдельном потоке, а при необходимости отрисовать какой-нибудь визуальный компонент, пользуйтесь Synchronize или Queue.
-
Ivan B. отреагировална Alex7wrt в Индикатор замирает во время создания объектов в ScrollBox'е
По моему, все равно. Как вам удобнее.
Я так понимаю, что TTask разработаны с прицелом на параллельные вычисления, когда нужно выполнять однотипные операции в нескольких потоках. Для этого дела там имеются опции по ожиданию выполнения остальных потоков и т.д.
TTask также удобен тем, что его можно сразу использовать, не нужно объявлять поток.
TThread удобен, если нужно выполнить определенный набор действий по завершению потока (с помошью OnTerminate). Может и в TTask такое есть, не знаю
Лично я просто привык использовать TThread
-
Ivan B. отреагировална krapotkin в Выполнение операции после скрытия меню
есть более интересный и по-мне, более правильный способ
по нажатию в меню не сразу выполняете что-то, а ЗАПИСЫВАЕТЕ действие, которое ВЫПОЛНИТСЯ по событию закрытия мультивью
тогда реакция наступает визуально правильная и дальше крутите колеса, запускайте потоки и все такое