Главная страница
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.029 c
14-79107
VEG
2003-11-01 21:01
2003.11.24
Проблема


14-79158
ИдиотЪ
2003-10-31 11:09
2003.11.24
откуда берутся идиоты?


1-79002
Aik
2003-11-12 10:39
2003.11.24
Кнопка вперёд и назад, Twebbrowser


3-78783
KIR
2003-11-05 15:34
2003.11.24
Народ, можли как-то добавить пустую строчку в НД?


3-78826
Pul
2003-11-04 15:48
2003.11.24
Использование UDF в SQL запросах Interbase