(8)me根本不懂OOP:Goodthreaddone 与 Goodthreaddone(nil)的区别(20分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
技术内幕P132
源代码如下://Tmythread2是TThread的一个派生类

1)procedure TForm1.bGoodThreadClick(Sender: TObject);
2)begin
3) ButtonsOff(True);
4) T2 := TMyThread2.Create(False);
5) T2.OnTerminate := GoodThreadDone;
6)end;
7)procedure TForm1.GoodThreadDone(Sender: TObject);
8)begin
9) T2.Free;
10) ButtonsOff(False);
11) ShowMessage('On Terminate for Thread 2 received');
12)end;
问题1:
以前我调用象这类方法(过程?)的时候都是
GoodTreadDone(nil)
在第5行,
T2.OnTerminate := GoodThreadDone;
这里的GoodThreadDone是什么?方法?
问题2:
线程创建以后就开始“运行”(该怎么说?)
------据说在线程“运行”的同时下一句开始执行,
"Onterminate" -----Occurs after the thread's Excute method has returned and before the thread is destroyed
-------------要has returned再执行??
两个-----------后的解释不矛盾么?

 
第5行的GoodThreadDone是函数的地址
可以将其赋值给一个指向函数的指针

线程创建后线程开始执行
T2.OnTerminate := GoodThreadDone只是给这个事件绑定了响应函数
GoodThreadDone并没有执行
一句赋值而已
 
onterminate的说明:
Write an OnTerminate event handler to execute code after the thread finishes executing
---绑定的这个函数在线程结束后执行?
 
》第5行的GoodThreadDone是函数的地址
》可以将其赋值给一个指向函数的指针
-----数据库里没用过指针,我对指针的概念又模糊了。
T2.Onterminate是个指针类型?
帮助里:property OnTerminate: TNotifyEvent;
TnotifyEvent是is the type for events that have no event-specific parameters.

理解为T2.Onterminate被赋值为
一个没有参数的事件(GoodThreaddone)更准确些?
 
另外,没有参数,用GoodThreadDone(nil)不行?
GoodThreadDone 与 GoodthreadDone(nil)在这里的区别?
 
OnTerminate 是TForm1
的一个成员变量
该变量是一个指向函数或过程的指针
 
1
一般事件赋值都不加参数的。
onTerminate := GoodThreadDone

只要类型一样就可以。

2
怎么矛盾呢?execute 执行完了以后,当然要销毁,这个销毁相当于
terminate, 之前发生 onTerminate 事件,

相当于 close 之前有 closequery 一样。
 
》execute 执行完了以后,当然要销毁,这个销毁相当于
terminate, 之前发生 onTerminate 事件,
-----onTerminate事件“发生”时,相当于
发生了“GoodThreadDone(nil)"?
 
应该不是 nil 吧。是你的类的实例。
 
后退
顶部