Правильный способ запустить приостановленную нить - никогда не иметь приостановленной нити.
Есть лучший способ создавать темы. Если вызывающая сторона должна предоставить значение для объекта, чтобы класс работал правильно, не делайте его необязательным: укажите его как параметр для конструктора. И если для этого параметра есть только одно допустимое значение, то даже не делайте его параметром: просто жестко закодируйте его в конструкторе. (Сколько раз вы писали класс потока, который только иногда должен освободиться после завершения? Я никогда не видел этого.)
constructor TMyThread.Create(Prop1, Prop2: Integer);
begin
inherited Create(False);
FreeOnTerminate := True;
Property1 := Prop1;
Property2 := Prop2;
end;
Тогда вы можете использовать метод создания потоков Рона Попейла: Просто установите его и забудьте об этом!
MyThread := TMyThread.Create(900, 2);
Вызывающий не должен ничего делать с потоком после его создания. А поскольку это поток с произвольным завершением, вполне возможно, что вызывающая сторона вообще не должна сохранять ссылку на переменную MyThread
, так как ссылка станет недействительной, как только поток завершит работу.
(Обеспокоенный тем, что строка inherited Create(False)
создает поток, который начнет работать до завершения работы остальной части конструктора? Не надо! Это было исправлено в Delphi 6 более десяти лет назад. Поток автоматически запустится сам после завершения конструктора; см. TThread.AfterConstruction
, чтобы увидеть как.)