导航

心动吧DELPHI网络书

自发研究:须要多维思想而且要想不可能为可能的人才能做到

« 绘制一个钢琴键盘利用ServerSocket和ClientSocket实现简单通讯 »

为什么在线程中调用时间控件会不执行呢?

为什么在线程中调用时间控件会不执行呢?

执行过程  

procedure Tkk.Timer1Timer(Sender: TObject); 
begin
form1.memo1.lines.add('aa');
end;

开始执行

procedure Tkk.Execute; 
var
Time:TTimer;
begin
{ Place thread code here }
Time:=TTimer.Create(nil);
Time.Enabled:=True;
Time.Interval:=1;
Time.OnTimer:=Timer1Timer;
end;
 
回复:
---------------------------------------------------------------------
#2楼 [楼主] 2009-01-09 08:51 万一     

@小驴

多线程是个比较复杂的概念, 我正在学习.
---------------------------------------------------------------------
#3楼  2009-01-09 11:44 欧阳蓝缺     

@小驴 需要注意两个地方:

1.确定memo1.lines.add('aa');是否被执行?

2.线程中如果要更新VCL控件内容,需要注意“线程与VCL数据同步”,及在线程中使用Synchronize调用更新VCL的代码。
---------------------------------------------------------------------
#4楼  2009-01-09 20:36 小驴 [未注册用户]

@欧阳蓝缺

二者已经查看过并没有任何问题。就是不执
---------------------------------------------------------------------
#5楼  2009-01-09 20:49 kissjetg [未注册用户] 

在线程中调用Time时,需要在创建线程时创建Time即可以...

例如
constructor Taa.create; 
begin
Time:=TTimer.Create(nil);
Time.Enabled:=false;
Time.OnTimer:=TimerProc;
Time.Interval:=1;
FreeOnTerminate := True; // 自动删除
inherited Create(False); // 直接运行
end;


调用的时候
procedure Taa.Execute;
begin
Time.Enabled:=True;
end;

执行过程
procedure Taa.TimerProc(Sender: TObject);
begin
form1.memo1.lines.add('aa');
end;
---------------------------------------------------------------------

原创文章如转载,请注明:转载自心动吧DELPHI网络书 [ http://www.abcxd.com/delphi/ ]

本文链接地址:http://www.abcxd.com/delphi/abcxddelphi/DELPHIVCLCZ/333/

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索内容

日历

Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved