谁为我解释这段代码的意思,及相关用法.(50分)

  • 主题发起人 主题发起人 wugwdelphi
  • 开始时间 开始时间
W

wugwdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
TPingThread = class(TThread)
protected
procedure Execute
override;
private
{ Private declarations }
hICMP: THANDLE;
IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle: TIcmpCloseHandle;
IcmpSendEcho: TIcmpSendEcho;

IP1, IP2, TimeOut: DWORD;
reply: TPingReply;
CurrentIP: string;

procedure OnReply;
procedure OnBegin;
procedure OnEnd;
procedure OnSend;
public
{ Public declarations }
OnBeginEvent: TNotifyEvent;
OnEndEvent: TNotifyEvent;
OnRecvEvent: TNotifyEvent;
OnSendEvent: TNotifyEvent;
constructor Create(IP_1, IP_2: string
time_out: integer);
end;
 
线程的头部定义
 
TPingThread = class(TThread) //线程类,继承于TThread
protected
procedure Execute
override
//重载Execute
private //私有变量声明
{ Private declarations }
hICMP: THANDLE;
IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle: TIcmpCloseHandle;
IcmpSendEcho: TIcmpSendEcho;

IP1, IP2, TimeOut: DWORD;
reply: TPingReply;
CurrentIP: string;

procedure OnReply
私有过程
procedure OnBegin;
procedure OnEnd;
procedure OnSend;
public
{ Public declarations } //公共变量声明
OnBeginEvent: TNotifyEvent;
OnEndEvent: TNotifyEvent;
OnRecvEvent: TNotifyEvent;
OnSendEvent: TNotifyEvent;
constructor Create(IP_1, IP_2: string
time_out: integer)
构造函数
end;


嘿嘿,瞎写的
 
哈哈哈,老大们我知道这个线程,不知道的主要是
procedure OnReply
私有过程
procedure OnBegin;
procedure OnEnd;
procedure OnSend;
public
{ Public declarations } //公共变量声明
OnBeginEvent: TNotifyEvent;
OnEndEvent: TNotifyEvent;
OnRecvEvent: TNotifyEvent;
OnSendEvent: TNotifyEvent;
 
这代码不是在控件中出现的,而只是普遍的自定义线程类,其中用到了这几行我不知道他们起什么作用,如何起作用.自定义消息也不是这样.
 
TNotifyEvent是Delphi定义的相当于指向类方法的一种指针类型
看代码应该是定义事件。
 
其原型就是这样:
TNotifyEvent = procedure(Sender: TObject) of object;
我知道这是指向一个对象的指针,但它跟事件有什么关系?
我给出的那阵内容是完整的一个类定义,如果让您来实现其代码,将会是如何去做呢?希望知者不吝赐教,3Q
 
procedure TPingThread.OnSend;
begin
....
if assigned(OnSendEvent) then
OnSendEvent(self);
end
 
回答不理想
有了这些定义以后,应该还有类似这样的语句:
property Aprop read onread write onwrite;
否则条件如何触发?
 
晕,不理解楼主的意思,
OnSend过程是类内部调用的方法,自己写代码显式调用.
而OnSendEvent: TNotifyEvent;是提供一个接口,可能某个时刻希望调用OnSend过程的时候再执行一些额外的动作,这时把这些动作放到一个TNotifyEvent 类型的过程中,并把该过程赋值给对象的OnSendEvent.
而你所说的
property Aprop read onread write onwrite;类似例子应该是这样的
TPingThread = class(TThread) //线程类,继承于TThread
....
private
FOnSendEvent:
protected
procedure OnSend;
public
{ Public declarations } //公共变量声明
property OnSendEvent: TNotifyEvent read FOnSendEvent write FOnSendEvent;
//如果你希望赋值的时候再多一些判断或其他动作也可以写成.
//property OnSendEvent: TNotifyEvent read FOnSendEvent write SetOnSendEvent;
 
刚学线程,不明白。
 
谢谢wrl_001您后面的回答说的很清楚了.我之前主要就是对onsend这样的过程与PROPERTY中用的过程有些混淆,您这么一解释就明白组件里为什么用Tnotifyevent这样的定义很多,也同时明白为什么可以在组件的很多事件里写入自己的代码,有时就需要这一点之功.
 
多人接受答案了。
 
TPingThread = class(TThread) //线程类,继承于TThread
protected
procedure Execute
override
//重载Execute
private //私有变量声明
{ Private declarations }
hICMP: THANDLE;
IcmpCreateFile : TIcmpCreateFile;
IcmpCloseHandle: TIcmpCloseHandle;
IcmpSendEcho: TIcmpSendEcho;

IP1, IP2, TimeOut: DWORD;
reply: TPingReply;
CurrentIP: string;

procedure OnReply
私有过程
procedure OnBegin;
procedure OnEnd;
procedure OnSend;
public
{ Public declarations } //公共变量声明
OnBeginEvent: TNotifyEvent;
OnEndEvent: TNotifyEvent;
OnRecvEvent: TNotifyEvent;
OnSendEvent: TNotifyEvent;
constructor Create(IP_1, IP_2: string
time_out: integer)
构造函数
end;
 
后退
顶部