Показать сообщение отдельно
  #1  
Старый 24.05.2011, 07:39
CarnoPhage CarnoPhage вне форума
Прохожий
 
Регистрация: 06.01.2008
Сообщения: 14
Репутация: 10
По умолчанию Потоки в службе

Здравствуйте! Не хотел писать в своем топе про службы, т.к. вопрос немного другой.

Есть поток, у которого есть процедура 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

Подобная проблема на С++ обсуждается тут, но на аглийском не осилил, какой итог, не понял
Ответить с цитированием