Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Помогите с ADO не освобождается память   Найти похожие ветки 

 
Andrey000   (2003-11-03 11:56) [0]

Проблемма такая не освобождается один дескриптор помогите :(
program s1;

{$APPTYPE CONSOLE}

uses
SysUtils,
ADODB,
ActiveX,
Classes,windows;

type
ms = class(TThread)
private
protected
aq1:TADOQuery;
error:boolean;
procedure Execute; override;
public
destructor Destroy;override;

end;

destructor ms.destroy;
begin
CoUnInitialize
aq1.free;
inherited destroy;
end;

procedure ms.Execute;
begin
CoInitialize(nil);
error:=false;
aq1:=TADOQuery.Create(nil);
aq1.ConnectionString:="driver={SQL Server}; server=serv; Database =master;Password=123;User ID=sa;";
aq1.CommandTimeout:=15;
aq1.Close;
aq1.SQL.Clear;
aq1.sql.Text:="use tempdb select * from dbo.syscolumns";
try
aq1.open;
except
error:=true;
end;
if error=true then
begin
end;
freeonterminate:=true;
end;

var fl:boolean;
begin
fl:=true;
repeat
ms.Create(false);
sleep(100000);
until fl=false;
end.


 
sniknik ©   (2003-11-03 12:24) [1]

а нафига тебе бесконечно большое количество потоков? да еще с незакрытой инициализацией (CoInitialize) в каждом? их количество (ин/анинициализаций) должно быть строго парным. + освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize).


 
Andrey000   (2003-11-03 12:39) [2]

так надо опрашивать базу каждые н секунд :)
я пробовал поставить и execute без деструктора все одна фигня


 
sniknik ©   (2003-11-03 12:49) [3]

ну так и опрашивай кто тебе не дает, но не создавай для одного опроса отдельный поток, ну или хотя бы "заноси ему хвосты" в смысле убирай все что наплодил.
или вообще не пользуйся потоком, раз все одно цикл вставляеш.


 
Andrey000   (2003-11-03 12:54) [4]

Просто потом я этот поток в сервис вставлю. А это я так пока отлаживаюсь


 
sniknik ©   (2003-11-03 13:16) [5]

в сервис-е тоже не обязательно свой поток создавать, он и так в отдельном потоке запускается, другое дело понадобилось бы их несколько.
(просто если ты так и перенесеш все с циклом, то бедные твои пользователи ;о)), не завидую я им)

> А это я так пока отлаживаюсь
а чего ошибки то не исправляеш?

кстати в первом посте (там можно не так понять)
освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize) это именно ошибка.


 
Andrey000   (2003-11-03 13:19) [6]

я испраил ситуация та же :(
кстати если не производить инициализацию в потоке то выдает ошибку


 
sniknik ©   (2003-11-03 13:37) [7]

> я испраил ситуация та же :(
и что получилось?
ADOConnection добавь, без него бывают странныу глюки(?) ситуации.


 
Andrey000   (2003-11-03 15:49) [8]

добавил все равно потеря указателя :( млин


 
sniknik ©   (2003-11-03 17:28) [9]

aq1.free с CoUnInitialize местами поменял?

и делал бы все в Execute;

begin
CoInitialize(nil);
try
xxx :=TADOQuery.Create(nil);
try
...
while not Terminated do begin
try
aq1.open;
except
...
end;
...
sleep(100000);
end;
...
finally
xxx.Free;
end;
finally
CoUnInitialize;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
4-79244
Leon_O
2003-10-01 18:08
2003.11.24
Как изменить дату создания файла?


14-79182
Soft
2003-10-25 01:29
2003.11.24
Есть ли смерть после жизни?


3-78833
SasaR
2003-11-04 13:34
2003.11.24
LookUp поле - динамически ???


1-78938
Yurko
2003-11-12 11:33
2003.11.24
EM_SETPASSWORDCHAR


1-79009
Pavels
2003-11-14 10:30
2003.11.24
как спрятать окно с панели задач, делаю так