powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как корректно убить поток?
10 сообщений из 35, страница 2 из 2
как корректно убить поток?
    #40009599
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что смешного ? Флаг freeonterminate := true.

Понятно что при freeonterminate := false было бы так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
While threads.count > 0 
begin
   thread := Threads.first;
   thread.Terminate;
   thread.WaitFor;
   FreeAndNil(thread);
   threads.remove(thread) 
End



И предикат с синхронайзом не нужен.
И замечу мне было лень писать тут код с критическими секциями,
поэтому выбрал синхронайз.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009601
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И уж забота программиста в своём потоке корректно обработать флаг Terminated.
Ржака это когда поток собрались WinApi функциями мочить, вот то ржака.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009609
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixrud
А что смешного ? Флаг freeonterminate := true.

Понятно что при freeonterminate := false было бы так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
While threads.count > 0 
begin
   thread := Threads.first;
   thread.Terminate;
   thread.WaitFor;
   FreeAndNil(thread);
   threads.remove(thread) 
End




И предикат с синхронайзом не нужен.
И замечу мне было лень писать тут код с критическими секциями,
поэтому выбрал синхронайз.
Смешного - масса бесполезного кода. Вот, что. Нопы, даже хуже.
Всю эту батарею можно выкинуть, кроме одной строки - FreeAndNil.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009619
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
FreeAndNil(thread);
   threads.remove(thread) 



Отгадайте сами, что удалится из списка... ну и если каждый поток завершается несколько секунд и их много, то ждать придется долго...
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009621
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
Код: pascal
1.
2.
FreeAndNil(thread);
   threads.remove(thread) 




Отгадайте сами, что удалится из списка...
Хорошай баг
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009626
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,

FreeAndNil(thread); принудительно убьет поток. С ошибкой.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009628
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,

Поменяй местами.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009629
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zelius,

А вы предпочитаете потерять ссылки на потоки и пускай они завершаются сами по себе??? Ну-ну.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009630
Mixrud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat,

При freeonterminate true. А я сделал примечание, флаг FreeOnTerminate false.
...
Рейтинг: 0 / 0
как корректно убить поток?
    #40009636
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixrud
Zelius,

А вы предпочитаете потерять ссылки на потоки и пускай они завершаются сами по себе??? Ну-ну.

Я предпочитаю сначала пройтись по всем потокам и сделать Terminate, а уже потом в новом цикле Free, так время ожиданию будет равно времени ожидания самого долгого потока, но не сумме всех потоков
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как корректно убить поток?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]