Auslogics: работа и отзывы о работе
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Пример кода №2

Участников: 5

Перейти вниз

Пример кода №2 Empty Пример кода №2

Сообщение автор Marina-T Чт Ноя 05, 2015 10:31 pm

Код:

var
IconCreator: TThread;
...
if Assigned(IconCreator) then
begin
IconCreator.Terminate;
IconCreator.WaitFor;
IconCreator.Free;
IconCreator := nil;
end;
...

Вышеприведенный код показывает плохое знание стандартных классов и системных модулей. Во-первых, проверка Assigned, метод Free и операция := nil заменяется на один метод FreeAndNil, во-вторых, при уничтожении объекта потока в его деструкторе, по умолчанию, вызываются Terminate и WaitFor. В итоге, этот участок кода можно заменить на одну строчку кода, что существенно улучшает читаемость кода в целом.
Marina-T
Marina-T
Admin

Сообщения : 33
Дата регистрации : 2015-11-04
Возраст : 37

https://auslogics.forum2x2.ru

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор SmartGuy Пн Ноя 23, 2015 10:06 pm

Конечно все зависит от задачи, но данный код может "заморозить" GUI. Как возможный вариант:
Код:
 IconCreator.FreeOnTerminate := True; IconCreator.OnTerminate := DoTerminate; ..... procedure TForm1.DoTerminate(Sender: TObject); begin IconCreator := nil; end;

SmartGuy

Сообщения : 5
Дата регистрации : 2015-11-20

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор DELPHI team Auslogics Вт Ноя 24, 2015 10:40 pm

Данный код может "заморозить" GUI только в случае неправильной работы с потоками.
DELPHI team Auslogics
DELPHI team Auslogics

Сообщения : 11
Дата регистрации : 2015-11-21

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор MaxMix Вт Ноя 24, 2015 10:51 pm

Ну начнем с того, что код в данном примере правильный с точки зрения скорости выполнения, он как раз оптимизирован скорости. Тот кто писал тест не понимает работы архитектуры процессора Intel и рекомендует использовать FreeAndNil. Увы Sad....Код вполне читабельный и КАК РАЗ! выявляет наоборот понимание программиста что он делает и зачем. А Само по себе использовать TThread в серьезных высоконагруженых приложених это красивая глупость.

MaxMix

Сообщения : 3
Дата регистрации : 2015-11-20

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор DELPHI team Auslogics Ср Ноя 25, 2015 10:28 pm

Мы ищем специалистов для разработки коммерческого ПО.
Сэкономить 2 байта и 0.1% в ресурсах, но потратить 3 дня на поиск багов - нецелесообразно в рамках ограниченности времени и бюджета.
Тем более, что в деструкторе все равное будут сделаны все необходимые проверки для уничтожения потока. Так зачем дополнительно вставлять 4-ре лишних вызова.

MaxMix пишет: Само по себе использовать TThread в серьезных высоконагруженых приложених это красивая глупость.
А что бы Вы посоветовали использовать?
TThread это просто обертка над WinAPI созданием потока не более того ...
DELPHI team Auslogics
DELPHI team Auslogics

Сообщения : 11
Дата регистрации : 2015-11-21

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор ZiProdj Пт Ноя 27, 2015 1:04 am

Не согласен выводами в примере.
Для потока может быть назначен обработчик события OnTerminate, внутри которого возможно обращение к IconCreator. Возможно, это сделано в коде выше и будет сделано при будущих правках. При замене на FreeAndNil переменная IconCreator в обработчике будет равна nil, что вызовет AV $00000000.

ZiProdj

Сообщения : 1
Дата регистрации : 2015-11-21

Вернуться к началу Перейти вниз

Пример кода №2 Empty Re: Пример кода №2

Сообщение автор DELPHI team Auslogics Ср Дек 02, 2015 8:55 pm

обращение к глобальной переменной (IconCreator) в событии потока некорректно и может приводить к ошибкам, если данное событие и назначается, то в нем необходимо использовать передаваемый параметр (Sender) для обращения к объекту потока.
DELPHI team Auslogics
DELPHI team Auslogics

Сообщения : 11
Дата регистрации : 2015-11-21

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения