有一个多线程的应用程序,在运行完成后,不会自动释放资源,FreeOnTerminate :=True我也设置了,我每运行一次,内存消耗就多8-10K,应该是会自动释放的啊,哪位大侠帮帮忙!我就20分了。
unit testthread;interfaceuses
Classes,adodb,db,SysUtils, IdGlobal;type
SendSalesActionMsg = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
Public
constructor Create();
destructor Destroy; override;
end;implementationuses Unit1;
constructor SendSalesActionMsg.Create ;
Begin
self.FreeOnTerminate :=True;
inherited Create(False);
end;destructor SendSalesActionMsg.Destroy;
begin
inherited Destroy;
end;procedure SendSalesActionMsg.Execute ;
var
Begin
.......... process code
ENd;end.
unit testthread;interfaceuses
Classes,adodb,db,SysUtils, IdGlobal;type
SendSalesActionMsg = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
Public
constructor Create();
destructor Destroy; override;
end;implementationuses Unit1;
constructor SendSalesActionMsg.Create ;
Begin
self.FreeOnTerminate :=True;
inherited Create(False);
end;destructor SendSalesActionMsg.Destroy;
begin
inherited Destroy;
end;procedure SendSalesActionMsg.Execute ;
var
Begin
.......... process code
ENd;end.
解决方案 »
- 托盘气球
- 为什么运行应用程序时会有这样的错误?
- Oracle9i.中国it实验室的远程教学ocp录像 bt下载
- 发现delphi的bug^_^有知道为什么的帮忙解释一下,如果没遇到过的也可以看看免得出现同样问题不知道怎么解决
- listview中排序与ONDATE有无冲突,如何解决
- 怎样把 FindDialog 的查找选项 赋给 RxRichEdit.FindText的查找选项
- 关于摄像头
- 关于多个表联合查询的小问题
- 大家看一下我写的这个触发器到底错在那里?
- 利用SQL语句进行数据表导出到EXCEL文件
- 在delphi中用ADO读取月excel数据时如某列大部分是数字时遇到汉字读不出来(在excel中已设为文本格式),请问怎么解决???急!!
- 盒子出现delphi2009正式版下载,达人验证下...
感谢各位的热心帮忙!只有20分送给失踪的月亮吧
var
ADOQry:TADOQuery;
StrID:String;
begin
FreeOnTerminate:=True;
Randomize;
StrID:=IntToStr(Random(50)+1); ADOQry:=TADOQuery.Create(nil);
ADOQry.Connection:=ADOConMain; ADOQry.Close;
ADOQry.SQL.Clear;
ADOQry.SQL.Add('Select * from users where id='+QuotedStr(StrID));
ADOQry.Open; Unit1.Form1.Memo1.Lines.Add(ADOQry.FieldByName('ID').AsString);
ADOQry.Close;
ADOQry.Free;
Application.ProcessMessages;
end;procedure NewThread.Execute;
begin
Synchronize(DoData);
{ Place thread code here }
end;//---------------------------------unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls,ActiveX,Unit2, ExtCtrls;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
MyThread:NewThread;
AllThread:Integer;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM users');
ADOQuery1.Open; if ADOQuery1.RecordCount<1 then
begin
for i:=1 to 50 Do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into users(id,name) values('+QuotedStr(IntToStr(i))+','+QuotedStr(IntToStr(i))+')');
ADOQuery1.ExecSQL;
end;
End;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
OleInitialize(nil);
AllThread:=StrToInt(Edit1.Text); for i:=1 to AllThread do
begin
MyThread:=NewThread.Create(True);
MyThread.ADOConMain:=TADOConnection.Create(nil);
MyThread.ADOConMain:=ADOConnection1;
MyThread.ADOConMain.LoginPrompt:=False;
MyThread.Resume;
Memo1.Lines.Add('开启线程'+InttoStr(i));
MyThread.ADOConMain.Close;
Sleep(1);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
OleUninitialize;
for i:=1 to AllThread do
begin
MyThread.Suspend;
Memo1.Lines.Add('线程关闭'+IntToStr(i));
end;
Timer1.Enabled:=False;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
Button1Click(nil);
Timer1.Enabled:=True;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;end.
运行一段时间之后就出现了存储空间不足,无法处理此命令的解决方案的错误,而且运行中CPU跳得很高