问个简单多线程概念问题

venge 2005-04-04 10:39:57
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, activex;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

lvThread = class(TThread)
private
btn1:tbutton;
protected
public
constructor Create(button:tbutton);
procedure Execute; override;
end;

var
Form1: TForm1;
lv:lvthread;

implementation

{$R *.dfm}

{ lvThread }

constructor lvThread.Create(button:tbutton);
begin
FreeOnTerminate:=true;
inherited Create(false);
btn1:=button;
end;

procedure lvThread.Execute;
begin
btn1.Caption:='ok';
form1.Button1.Caption:='ok';//这两种用法的差别体现在哪里?
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
lv:=lvthread.Create(button1);
end;

end.

我想知道对于控件,这两种用法到底各自是什么意思,因为如果从方便的角度来讲,线程里面控件多的时候第二种方法很方便,但是既然delphi提供了把控件传进线程的方法,我想它们应该有区别吧。
我怕程序做大后才发现它们的不同,那时要改n多东西,就太晚了,大家帮帮忙吧
...全文
86 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondtkl 2005-04-05
  • 打赏
  • 举报
回复
:-)

記住 
你只需要給別人需要的東西 不需要的話 就隱藏

這是OO的一種基本概念 信息隱藏(非pulic之類的) 封裝。
venge 2005-04-05
  • 打赏
  • 举报
回复
听君一席话,胜读十年书啊,谢谢啦
flyinwuhan 2005-04-05
  • 打赏
  • 举报
回复
效果是一样的
但是使用第一种方法好一些
你写的是个特殊的例子,线程类和窗口类在一个单元,在线程类中可一直接访问form1,但是如果别人单独使用你的线程类怎么办?
其次,你的线程类只需要访问button,但是如果用第二种方法,却可以访问到form1的太多东西,不利于封装
再次,私有或保护的变量如果想传入线程类必须使用第一种方法,第二种方法就失灵了~~~~~~~~
tomp 2005-04-05
  • 打赏
  • 举报
回复
应该一样吧
tomp 2005-04-05
  • 打赏
  • 举报
回复
gz

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧