Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление TADOConnection в потоке [D7, MSSQL]


Страницы:   1 2 3

Артем ©   (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) не "убивается", а просто удаляется из списка... еще более странно. а говоришь уничтожается... где?
наверное в "..." или в "...", хотя нет в "...", или не так,  а так "все переписать нафиг" все, что стесняешься показать это один большой глюк.

+
нет надобности в потоках, есть асинхронный режим, там он сам потоками "рулит".

> Помогите кто-нибудь, кто сталкивался с подобным.
шутишь? подобного не повторить... где уж столкнуться.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо