我创建了一个线程。但是发现线程执行完后,系统没有释放指定的线程及资源,即没有执行到指定的destory析构函数,请问大侠们是怎么回事呀?下面是线程创建的源代码,简化了
threadvar
ii:integer;
type
TVfgProcess = class(TThread)
private
TcpConn: TIdTcpServerConnection;
AThread: TIdPeerThread;
CommPkg:String;
VarList, SimulaDataList:TStringList; //存放在各个方法间传递的变量和值,模拟值,
TermFmtList, TermDataList:TStringList; //存放终端请求数据和数据格式
DbList:TStringList;
BankFmtList,BankDataList:TStringList; //存放后台的请求包格式和模拟数据
tcpClient: TIdTCPClient;
protected
procedure Execute; override;
procedure FreeSrc;
procedure SB_Process();
procedure RB_Process();
public
over_flag:boolean;
constructor Create(pAThread: TIdPeerThread;paCommPkg:string);
destructor Destory();
end;
implementationuses
untVFMonitor;constructor TVfgProcess.Create(pAThread: TIdPeerThread;paCommPkg:string);
begin
inherited create(true);
inc(gThreadCount); //线程数加1 over_flag := false;
end;procedure TVfgProcess.FreeSrc;
begin
//释放相关资源
end;destructor TVfgProcess.Destory();
begin
gThreadCount := gThreadCount-1;
FreeSrc;
end;
//下面是调用线程的部分
th := TVfgProcess.Create(AThread, TermRequestData);
th.Resume;
lCount := 0;
while not th.over_flag do
begin
inc(lCount);
if lCount>1000 then break;
sleep(100);
end;
th.Free;
本来是没有th.Resume后面的部分的,但是加了之后,还是不会执行到线程的destory
请问是怎么回事,应该如何设计或调用,才能使destory被执行?
就算在th.Free之前执行 th.Destory,结果也是一样,destory的代码并不会执行
threadvar
ii:integer;
type
TVfgProcess = class(TThread)
private
TcpConn: TIdTcpServerConnection;
AThread: TIdPeerThread;
CommPkg:String;
VarList, SimulaDataList:TStringList; //存放在各个方法间传递的变量和值,模拟值,
TermFmtList, TermDataList:TStringList; //存放终端请求数据和数据格式
DbList:TStringList;
BankFmtList,BankDataList:TStringList; //存放后台的请求包格式和模拟数据
tcpClient: TIdTCPClient;
protected
procedure Execute; override;
procedure FreeSrc;
procedure SB_Process();
procedure RB_Process();
public
over_flag:boolean;
constructor Create(pAThread: TIdPeerThread;paCommPkg:string);
destructor Destory();
end;
implementationuses
untVFMonitor;constructor TVfgProcess.Create(pAThread: TIdPeerThread;paCommPkg:string);
begin
inherited create(true);
inc(gThreadCount); //线程数加1 over_flag := false;
end;procedure TVfgProcess.FreeSrc;
begin
//释放相关资源
end;destructor TVfgProcess.Destory();
begin
gThreadCount := gThreadCount-1;
FreeSrc;
end;
//下面是调用线程的部分
th := TVfgProcess.Create(AThread, TermRequestData);
th.Resume;
lCount := 0;
while not th.over_flag do
begin
inc(lCount);
if lCount>1000 then break;
sleep(100);
end;
th.Free;
本来是没有th.Resume后面的部分的,但是加了之后,还是不会执行到线程的destory
请问是怎么回事,应该如何设计或调用,才能使destory被执行?
就算在th.Free之前执行 th.Destory,结果也是一样,destory的代码并不会执行
解决方案 »
- 怎么样实现将一个.ini 文件添加到.exe 文件的末尾?
- 有2个:界面:A界面 B界面,在A界面上有个按钮,点击将执行,最小化A界面,弹出B界面,此时我想实现 B界面最前直,就像 windows任务管理器 那样 代码
- GetKeyboardState的问题???
- AdoQuery 中的 AfterScroll 事件死循环问题求解!
- Delphi 数据库高手帮忙解答
- 求一sql语句
- 怎样像CS那样判断在局域网中本软件的CDKEY是否正在使用???
- 内存影射文件实现行吗?
- 一段C HAS1 + base64的代码 转成 DELPHI ,能帮我吗?谢谢。
- 请问各位:如何得到每个输入法相应得图标?
- 好长时间没来CSDN了我参与的问题怎么都没了
- LISTVIEW中的列头能否增加为两行?
try
try
.......
except
.....
end;
finally
over_flag := true;
end
括起来了的
这一句应该写在什么地方?什么条件下该句会起作用?