Опитвам се да постигна следното (използвайки Delphi7): След като влезе в моята програма, потребителят получава контрол, но във фонов режим отделна нишка изтегля файл от интернет, за да провери дали текущият лицензен ключ е в черния списък. Ако е така, потребителят получава подкана и програмата се прекратява.
Така че създадох отделен клас TThread, който изтегля черния списък от мрежата с помощта на InternetOpenURL/InternetReadFile.
Проблемът ми е следният:
Ако потребителят напусне моята програма, преди изтеглянето във фонов режим да приключи, нишката на мениджъра на лицензи трябва да бъде прекратена от основната нишка.
Ако нишката е свършила работата си, тя трябва да прекрати автоматично.
Ако използвам FreeOnTerminate := true, не мога да прекратя нишката от основната нишка. Но иначе, как мога да накарам нишката да освободи своите ресурси, след като е свършила работата си?
Другият ми въпрос е:
Ако лицензният ключ е в черния списък, използвам Синхронизиране, за да направя нещо с определени ресурси от основния формуляр на приложението.
Но как да разбера дали потребителят вече е затворил приложението и програмата е във FormDestroy на основния формуляр, например? Ако синхронизирам в грешното време, това може да доведе до нарушения на достъпа...
Благодаря!
WaitFor
илиTerminate
при специални условия), тогаваFreeOnTerminate
не е правилният инструмент за работата. FreeOnTerminate е пряк път, който използвате за запалване и забравяне. Можете да създадетеTSimpleEvent
за проследяване кога/дали нишката действително е унищожена и да позволите на приложението си даWaitFor
това. Но тогава можете сами да унищожите нишката с:Thread.Terminate; Thread.WaitFor(<timeout>); Thread.Free;
. - person Disillusioned   schedule 24.10.2014