Assigned 和 nil的用法 ( 积分: 50 )

  • 主题发起人 主题发起人 yanghai0437
  • 开始时间 开始时间
Y

yanghai0437

Unregistered / Unconfirmed
GUEST, unregistred user!
我不知道什么时候该用Assigned,什么时候该用nil?
如何判断一个线程对象已经释放了
如果这样使用会出错吗?
FreeOnTerminate := true;
if Assigned(mMacChengLiangThread) then
begin
mMacChengLiangThread.Terminate;
for i:= 0 to 39do
begin
//等待线程释放
if mMacChengLiangThread.bTerminated then
break;
Sleep(50);
end;
mMacChengLiangThread := nil;
end;
如果错了该怎样判断,怎样释放。我用waitfor老是有死掉的感觉,有时还会出错.
 
我不知道什么时候该用Assigned,什么时候该用nil?
如何判断一个线程对象已经释放了
如果这样使用会出错吗?
FreeOnTerminate := true;
if Assigned(mMacChengLiangThread) then
begin
mMacChengLiangThread.Terminate;
for i:= 0 to 39do
begin
//等待线程释放
if mMacChengLiangThread.bTerminated then
break;
Sleep(50);
end;
mMacChengLiangThread := nil;
end;
如果错了该怎样判断,怎样释放。我用waitfor老是有死掉的感觉,有时还会出错.
 
释放指针类型类量赋 nil
 
如果用于判断,assigned与nil是一样的,
if mMacChengLiangThread = nil then
;
等同于
if assigned(mMacChengLiangThread) then
;
但是nil还可以用于赋值,而assigned不能:
mMacChengLiangThread := nil;
 
assigned()函数用于判断指针是否为nil
 
向对象赋空值时用nil。
判断对象有否分配assigned()与nil两者等效。
waitfor并没错,
主要的是在你的线程里面,对bTerminated的处理要及时,这样当你程序要结束时,才不至于出现死掉的假象。
 
楼上说的对!
 
对bTerminated我是在destroy中处理的
 
两个效果都是一样的,一般都用Assigned来判断
 
多人接受答案了。
 
后退
顶部