![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление TADOConnection в потоке [D7, MSSQL]
Артем © (2011-08-02 21:40:00)Здравствуйте мастера!
Проблема в том что нужно удалять соединения в потоке.
Вот примерный код потока:
type TMyThread= class(TThread);
....
FObjList: TObjectList;
Crit: TCriticalSection;
....
end;
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FObjList:= TObjectList.Create(True);
Crit:= TCriticalSection.Create;
end;
procedure TMyThread.AddObject(Obj: TADOConnection);
begin
Crit.Enter;
FObjList.Add(Obj);
Crit.Leave;
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
sleep(10); //чтоб поток не грузил процессор
if FObjList.Count>0 then
FObjList.Delete(0);
end;
end;
//потом в основном потоке
...
var
T:TMyThread;
...
//поток создается и т.д.
...
//вызывается метод AddObject у потока
T.AddObject(Connection);
Прошелся дебагером по потоку объект вроде как уничтожается, но в ProcessExplorer'е увеливается счетик User Handles ровно на количество созданных мной соединений. CoInitialize и CoUninitialize никак не помогают.
Соединения надо удалять так, потому что сединение с СУБД MsSQL может не пройти по каким-либо причинам, и соединение подвисает, а при уничтожении соединения и основной поток, поэтому уничтожение убрано в отдельный поток.
Помогите кто-нибудь, кто сталкивался с подобным.
Ega23 (2011-08-02 23:32:00) [41]
> объект (vcl) не "убивается", а просто удаляется из списка.
У него же TObjectList, а не TList
Хотя в целом - безусловно говнокод
sniknik (2011-08-02 22:19:00) [42]ADO соединение это вообще то COM объект... и он может не уничтожаться, а ждать какое то время следующего, если они быстро друг за другом идут, это ускоряет процесс.
но у тебя и без "тонкостей" ошибок хватает...
используешь поток как список объектов "из вне" потока... странно. ссылка на объект в 2 местах минимум...
объект (vcl) не "убивается", а просто удаляется из списка... еще более странно. а говоришь уничтожается... где?
наверное в "..." или в "...", хотя нет в "...", или не так, а так "все переписать нафиг" все, что стесняешься показать это один большой глюк.
+
нет надобности в потоках, есть асинхронный режим, там он сам потоками "рулит".
> Помогите кто-нибудь, кто сталкивался с подобным.
шутишь? подобного не повторить... где уж столкнуться.