OnTerminate可不可以在非vcl的unit中使用呢.(6分)

  • 主题发起人 主题发起人 lslyl
  • 开始时间 开始时间
L

lslyl

Unregistered / Unconfirmed
GUEST, unregistred user!
能的话怎么作,
不能的话那要怎么在非vcl的unit中,在线程结束时触发一个procedure
 
当然可以,只要你把要在线程终止执行的代码写在一个过程中,然后把这个过程的指针给OnTerminate就可以了,如下:
procedure WhenThreadFinished(Sender: TObject);
begin
{Insert the Code that run when the Thread Object Execute Over}
end;

AThread.OnTerminate := WhenThreadFinished;
 
注意,参数要一致,否则要出错的
 
不行呀.提示错误的.写在一个有窗体的unit中不会报错的.可是写在非窗体的unit中报错呀
 
帮顶!
╭=========================================╮
80G海量源代码,控件,书籍全免费狂下不停!
http://www.source520.com

╰=========================================╯
 
这个一个事件,事件函数是8字节的,和一般4字节的函数不一样,所以一定要把对象里面的函数赋值给它,就是procedure (XXXXX) of object;
具体参见李维的《VCL架构剖析》,其中有关于procedure of object的说明,还讲了VCL内部怎么把一个普通函数转化为一个procedure of object的,相当有趣。
 
使用这个:
function ProcedureToMethod(self: TObject;
procAddr: pointer) : TMethod;
begin
result.Data := self;
result.Code := procAddr;
end;
使用:xxx.Onyyy := TyyyEvent(ProcedureToMethod(xxx, zzz))
 
后退
顶部