Предположим, у меня есть анонимный поток, который выполняет некоторую фоновую обработку:
procedure TForm1.FormCreate(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure begin
while True do begin
Sleep(500);
OutputDebugString('I am alive');
end;
end).Start;
end;
Поток не разделяет никаких ресурсов с основным потоком, он просто сидит там и работает «навсегда».
Поскольку нет встроенного механизма, такого как Terminate
для анонимных threads, означает ли это, что мне не нужно уведомлять поток о завершении основного потока процесса?
Если вы просто запустите новое приложение VCL и вставите приведенный выше код в событие FormCreate, оно будет писать I am alive
каждые полсекунды в сообщения отладки. При выходе из приложения (т. е. при закрытии формы) создается впечатление, что поток также завершается, несмотря на то, что он не проверяет наличие каких-либо сигналов.
Это нормально, или мне нужно реализовать какой-то сигнал, используя TEvent
или аналогичный, чтобы уведомить поток?
Или лучше написать кастомный TThread
потомок и сохранить ссылку на ветку, чтобы потом Thread.Free
его ?