Здравствуйте! Не хотел писать в своем топе про службы, т.к. вопрос немного другой.
Есть поток, у которого есть процедура OnTerminate, если создать такой поток в простом приложении, то нормально отрабатывает execute, потом OnTerminate, и поток прекращает жить.
Но если этот же поток создается в службе, то execute отрабатывает, но завершения не происходит, OnTerminate не вызывается и поток остается в памяти, хотя уже ничего не делает.
Есть какая то особенность в создании потоков в службах?
Поток в службе создается в процедуре ServiceThread, вызываю поток как и всегда
вызов потока
Код:
Test1:=TThreadTest.Create(true);
Test1.FreeOnTerminate:=true;
Test1.Resume;
Описание класса
Код:
type TThreadTest = class(TThread)
private
ts:TStringList;
public
procedure terminate1(Sender:TObject);
constructor Create(CreateSuspended: Boolean);
procedure execute; override;
end;
constructor TThreadTest.Create(CreateSuspended: Boolean);
begin
inherited;
ts:=TStringlist.Create;
onterminate:=terminate1;
end;
procedure TThreadTest.execute;
begin
inherited;
ts.Text:='START';
ts.SaveToFile('d:\!!_start.txt');
end;
procedure TThreadTest.terminate1;
begin
ts.Text:='END';
ts.SaveToFile('d:\!!_END.txt');
ts.Free;
end;
исходник службы слил тут
http://www.sql.ru/forum/actualthread...id=340446&pg=5
Подобная проблема на С++ обсуждается
тут, но на аглийском не осилил, какой итог, не понял