Delphi 线程Timer (TThreadTimer)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Delphi 线程Timer (TThreadTimer),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2230字,纯文字阅读大概需要4分钟。
内容图文
![Delphi 线程Timer (TThreadTimer)](/upload/InfoBanner/zyjiaocheng/1100/2410ca5a8ab74f11b28866589370c9b7.jpg)
delphi 自带的Timer控件,使用方便,但它的 OnTimer 事件是在主线程中引发的。
如果在事件中执行较耗时的代码,会引起主界面假死。故实现一个线程的Timer就有必要了。
TThreadTimer 基于 TSimpleThread 继承而来。
unit uThreadTimer; interface uses uSimpleThread; type TThreadTimer = class; // 提前申明 TThreadTimer 是一个类 TOnThreadTimer = procedure(Sender: TThreadTimer) ofobject; // 此处就可以引用 TThreadTimer,这种写法避免将 Sender 写为 TObject;// 为什么要写这个 sender ,主要是为了区别是谁引发了事件,并且 sender 上可以带参数// 方便进一步使用 TThreadTimer = Class(TSimpleThread) private FInterval: Cardinal; FOnThreadTimer: TOnThreadTimer; procedure CountTimer; procedure DoCountTimer; procedure SetInterval(val: Cardinal); procedure SetOnThreadTimer(val: TOnThreadTimer); procedure DoOnThreadTimer; // 请学习此写法publicconstructorCreate(AAllowActiveX: Boolean = false); // AAlowActiveX 在父类中有说明procedure StartThread; override; // 重载父类的 StartThreadproperty Interval: Cardinal read FInterval write SetInterval default1000; // 这个 default 1000 是给人看的,不会产生实际作用。// 故还需要在 Create 事件中指定 FInterval:=1000;// 如果可视化控件的 published 块中,此值会显示在属性编辑框中property OnThreadTimer: TOnThreadTimer read FOnThreadTimer write SetOnThreadTimer; End; implementation{ TThreadTimer }procedure TThreadTimer.CountTimer; begin ExeProcInThread(DoCountTimer); // 将 DoCountTimer 置入线程中去执行// 这是 TSimpleThread 的用法end; constructor TThreadTimer.Create(AAllowActiveX: Boolean); begininheritedCreate(AAllowActiveX); FInterval := 1000; // 默认间隔时间为 1 秒end; procedure TThreadTimer.DoCountTimer; beginif WaitStop then// 这是父类的一个属性,表示线程现在需要停止了。 exit; SleepExceptStopped(FInterval); // sleep 指定的时间,如果中途接到退出指令,则马上响应。// 父类中有源码,可看一看ifnot WaitStop thenbegin DoOnThreadTimer; // 引发时间到事件end; CountTimer; // 再次在线程中执行 DoCountTimer;// 父类已经设计好了,就这样简单地调用,即可实现在线程中执行本过程,但又不会引起“递归”end; procedure TThreadTimer.DoOnThreadTimer; beginif Assigned(FOnThreadTimer) then FOnThreadTimer(Self); // 把这句写为一个过程,看似啰嗦,但为了程序可读性,是值得的。end; procedure TThreadTimer.StartThread; begininherited; CountTimer; // 启动计时end; procedure TThreadTimer.SetInterval(val: Cardinal); begin FInterval := val; end; procedure TThreadTimer.SetOnThreadTimer(val: TOnThreadTimer); begin FOnThreadTimer := val; end; end. uThreadTimer.pas
http://www.cnblogs.com/lackey/p/5411389.html
原文:http://www.cnblogs.com/findumars/p/5648525.html
内容总结
以上是互联网集市为您收集整理的Delphi 线程Timer (TThreadTimer)全部内容,希望文章能够帮你解决Delphi 线程Timer (TThreadTimer)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。