Свойство TThread.Suspended не является Deprecated (в отличие от методов Resume() и Suspend()), соответствует логике конструктора и совместимо с любыми версиями Delphi/FPC.
TThread.Execute выполняется минимум два раза - при старте потока и при его разрушении. А в некоторых реализациях выполняется в цикле.
TThread.Terminate() просто ставит потоку признак "остановлен", но не останавливает его, поэтому можно безопасно применять внутри самого потока.
if Assigned(Obj) then FreeAndNil(Obj); - просто привычка =)
1) я не зря уже писал, что мы это обсуждали. причем именно с тобой. из-за ограничения синтаксиса нельзя повесить deprecated директиву на property. Проперть замыкается именно на deprecated методы
2) В какой такой реализации TThread.Execute выполнится дважды? Твой код по fpc или delphi?
я очень сомневаюсь, что даже если под fpc они бы не стали делать такую фигню
3) Зачем тебе TThread.Terminate? это просто мусор в данном случае. Единственное, что может оправдать его - это что реально в 2 окажется правдой
4) if Assigned(Obj) then FreeAndNil(Obj); Это мусор
5) "Финт с таймером" тоже бесполезный мусор