黑
黑狼
Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi编程中我们遵循这样一条原则,"不用的对象应该及时从内存清除掉."
但是,我在处理多线程的程序时,发现线程对象用一种方法不能自动从内存中清除.如以下源代码:
procedure tmythread.execute;
var
i:integer;
begin
freeonterminate:=true;
for i:=0 to 10000do
do
SOMETHING....;
end;
执行完以上语句后,这个多线程对象应该被freeonterminate:=true从内存中清除掉.
但是,当我用以下源代码判断时,却发现不是这样的.
var
mythread:tmythread;
procedure TForm1.Button1Click(Sender: TObject);
begin
if assigned(mythread) then
messagebox(0,'多线程对象清除成功!','提示!',mb_ok)
else
messagebox(0,'多线程对象清除失败!','提示!',mb_ok);
end;
结果当然是"多线程对象清除失败!"
<<注:"freeonterminate:=true是一些delphi书中介绍的清除多线程对象的方法".>>
当我用mythread.free时不是出现错误提示:"非法句柄",就是程序死掉.WHY???????
而我最后用以下源代码实现清除多线程对象,在execute最后加了一句free.
procedure tmythread.execute;
var
i:integer;
begin
freeonterminate:=true;
for i:=0 to 10000do
do
SOMETHING....;
free;
end;
问题是解决了,但问题我还没搞清楚,矛盾吧!
希望各位高手帮忙告诉我一下这是怎么什么原因!
但是,我在处理多线程的程序时,发现线程对象用一种方法不能自动从内存中清除.如以下源代码:
procedure tmythread.execute;
var
i:integer;
begin
freeonterminate:=true;
for i:=0 to 10000do
do
SOMETHING....;
end;
执行完以上语句后,这个多线程对象应该被freeonterminate:=true从内存中清除掉.
但是,当我用以下源代码判断时,却发现不是这样的.
var
mythread:tmythread;
procedure TForm1.Button1Click(Sender: TObject);
begin
if assigned(mythread) then
messagebox(0,'多线程对象清除成功!','提示!',mb_ok)
else
messagebox(0,'多线程对象清除失败!','提示!',mb_ok);
end;
结果当然是"多线程对象清除失败!"
<<注:"freeonterminate:=true是一些delphi书中介绍的清除多线程对象的方法".>>
当我用mythread.free时不是出现错误提示:"非法句柄",就是程序死掉.WHY???????
而我最后用以下源代码实现清除多线程对象,在execute最后加了一句free.
procedure tmythread.execute;
var
i:integer;
begin
freeonterminate:=true;
for i:=0 to 10000do
do
SOMETHING....;
free;
end;
问题是解决了,但问题我还没搞清楚,矛盾吧!
希望各位高手帮忙告诉我一下这是怎么什么原因!