Прекъсване на изпълнението на нишка (TThread)
Нишката работи отдавна и ако затворите програмата преди края на нишката, възниква грешка (списъкът TList Synchronize (SynhroList) се формира от потока). Кое е по-добре: изчакайте нишката да се изпълни или прекъсне?
И ако прекъснете как да го направите безопасно (с проверка за съществуването на поток)?
Поток се създава за всеки случай на формиране на списък, като този:
mFScaner: = TFScaner.Create (Вярно);
mFScaner.FreeOnTerminate: = вярно;
mFScaner.Priority: = tpNormal;
mFScaner.Resume;
> Кое е по-добре: изчакайте нишката да се изпълни или прекъсне?
по-добре е ако допълнителната нишка завърши изпълнението си сама по команда на основната нишка.
и за да направи това възможно най-бързо, в метода TThread.Execute можете циклично и възможно най-често да проверявате състоянието на флага TThread.Terminated (при създаване на допълнителна нишка той се изчиства и ще бъде cocked, веднага щом някоя нишка извика метода TThread.Terminate) и веднага след като бъде открито извитото състояние на флага, незабавно прекратете изпълнението на цикъла, последвано от прекратяването на TThread.Execute
Thread.Terminate;
Thread.WaitFor;
Thread.Free;
примерът в [4] с FreeOnTerminate = True е изпълнен с "рейк".
защото няма гаранция, че по време на Thread.WaitFor обектът все още съществува - той вече може да е бил унищожен в периода между Thread.Terminate и Thread.WaitFor
FreeOnTerminate = Вярно в някои от неговите приложения е опасен подход за унищожаване на търговски обекти
Бих препоръчал да не задавате този флаг, а просто да извикате Thread.Free в точния момент, при условие че алгоритъмът в тялото за изпълнение правилно реагира на състоянието на прекратения флаг
FreeOnTerminate = Вярно в някои от неговите приложения е опасен подход за унищожаване на търговски обекти
Бих препоръчал да не задавате този флаг, а просто да извикате Thread.Free в точния момент, при условие че алгоритъмът в тялото за изпълнение правилно реагира на състоянието на прекратения флаг