|
#1
|
|||
|
|||
Потоки в службе
Здравствуйте! Не хотел писать в своем топе про службы, т.к. вопрос немного другой.
Есть поток, у которого есть процедура 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 Подобная проблема на С++ обсуждается тут, но на аглийском не осилил, какой итог, не понял Последний раз редактировалось CarnoPhage, 24.05.2011 в 09:35. |