Питання # 6 119 ..., будь ласка як завершити потік під час роботи при закритті форми

Вітаю!
Підкажіть, будь ласка як завершити потік під час роботи при закритті форми.

До питання прикріплений файл. Завантажити »(термін зберігання: 60 днів з моменту відправки питання)

Привіт, Shouldercannon!
Є два способи - правильне завершення і завершення з збоченням. Другий спосіб має на увазі вбивання потоку, але при цьому вбивають його "по-звірячому" і ніхто не гарантує, що основна програма виживе. Тому цей спосіб не рекомендується. (Виглядає він так)

Правильний спосіб полягає в тому, що потік повинен сам завершити себе. Для цього у делфовской реалізації потоків є поле Terminated. Потік повинен час від часу перевіряти це поле на true і якщо це так, то повинен завершувати свою роботу (в загальному випадку - просто підчистити свої ресурси і викликати exit).

А той, хто цього потребує, щоб потік завершився, просто викликає. Але ніхто не гарантує, що потік відразу завершиться (потоку туди ще потрібно дійти, перевірити умова, завершитися). Якщо потрібно дочекатися завершення потоку, то пишемо так
Але тільки потрібно розуміти, що WaitFor - блокуюча операція і буде пригальмовувати інтерфейс (але якщо потік завершиться швидко, то ніяких проблем).

Міні-форум питання

Переважно правильне завершення.
Знову тажа помилка. Щось я упустив, але що?

Виставлені DownLoader_Thread.FreeOnTerminate: = True ;. тоді викликати деструктор для тред вже не потрібно. Тому що Делфі сама його викличе за вас. А так як є виклик WaitFor, то до моменту виклику деструктора Вами, він вже буде викликаний.

До того ж, є одна тонка специфіка. Якщо задано FreeOnTerminate: = True, то OnTerminate тред викликається в контексті потоку. А якщо false, то в контексті тред, який викликав free.

Галочка "підтвердження прочитання" - вселенське зло.