TTimer源码研究
TTimerProc = procedure of object;
IFMXTimerService = interface(IInterface)
['{856E938B-FF7B-4E13-85D4-3414A6A9FF2F}']
function CreateTimer(Interval: Integer; TimerFunc: TTimerProc): TFmxHandle;
function DestroyTimer(Timer: TFmxHandle): Boolean;
function GetTick: Extended; // 这里不知道哪里被使用。
end;
TTimer = class(TFmxObject) // 注意TTimer只是包含时间器服务,并不是自己实现时间器服务
private
FInterval: Cardinal; // 时间间隔
FTimerHandle: TFmxHandle; // 时间句柄,其中 TFmxHandle = THandle;
FOnTimer: TNotifyEvent; // 时间触发事件
FEnabled: Boolean; // 是否有效
FPlatformTimer: IFMXTimerService; // 最重要,时间服务接口,包含3个函数
procedure Timer; // 调用 (程序员定义的) OnTimer 事件
protected
// 注意,这些函数全部都是虚函数
procedure SetEnabled(Value: Boolean); virtual; // 重要,如果与上一次的值不同,那么赋值后UpdateTimer
procedure SetInterval(Value: Cardinal); virtual; // 重要,如果与上一次的值不同,那么赋值后UpdateTimer
procedure SetOnTimer(Value: TNotifyEvent); virtual; // 重新指定事件后UpdateTimer
procedure DoOnTimer; virtual; // 执行 (程序员定义的) OnTimer 事件
procedure UpdateTimer; virtual; // 最重要,会杀掉当前时间器并重新生成(接口函数CreateTimer,根据不同平台),似乎默认开启
procedure KillTimer; virtual; // 只要时间器句柄不等于-1就销毁,且句柄赋值为-1
procedure Loaded; override; // 执行TComponent.Loaded(从文件内存里读出后初始化)后执行UpdateTimer
public
constructor Create(AOwner: TComponent); override; // 根据不同平台创建时间器,默认开启,但句柄为-1
destructor Destroy; override; // 变量无效后 KillTimer,后者根据不同平台真正销毁(DestroyTimer接口函数)
published
property Enabled: Boolean read FEnabled write SetEnabled default True;
property Interval: Cardinal read FInterval write SetInterval default 1000;
property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer;
end;
另外还有(帮助上竟然查不到这两个类):
TAniThread = class(TTimer)
TPurgatory = class (TComponent)
TTimer源码研究的更多相关文章
- OAuth2学习及DotNetOpenAuth部分源码研究
OAuth2学习及DotNetOpenAuth部分源码研究 在上篇文章中我研究了OpenId及DotNetOpenAuth的相关应用,这一篇继续研究OAuth2. 一.什么是OAuth2 OAuth是 ...
- Android开源项目 Universal imageloader 源码研究之Lru算法
https://github.com/nostra13/Android-Universal-Image-Loader universal imageloader 源码研究之Lru算法 LRU - Le ...
- zepto源码研究 - zepto.js - 1
简要:网上已经有很多人已经将zepto的源码研究得很细致了,但我还是想写下zepto源码系列,将别人的东西和自己的想法写下来以加深印象也是自娱自乐,文章中可能有许多错误,望有人不吝指出,烦请赐教. 首 ...
- dubbo源码研究(一)
1. dubbo源码研究(一) 1.1. dubbo启动加载过程 我们知道,现在流行注解方式,用spring管理服务,dubbo最常用的就是@Reference和@Service了,那么我首先找到这两 ...
- 【JavaScript】$.extend使用心得及源码研究
最近写多了js的面向对象编程,用$.extend写继承写得很顺手.但是在使用过程中发现有几个问题. 1.深拷贝 $.extend默认是浅拷贝,这意味着在继承复杂对象时,对象中内嵌的对象无法被拷贝到. ...
- underscore.js源码研究(8)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(7)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(6)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
- underscore.js源码研究(5)
概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...
随机推荐
- 关于C++的new是否会对内存初始化的问题
先把结论放上来: C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化:如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的 ...
- 什麼是 struct,union,enumeration 的 tag ?
struct tag { member-list }; union tag { member-list }; enum tag { member-list }; union test1 { int a ...
- buffer和cache怎么让你们解释的那么难理解?
对于一个即将踏上“系统运维”或者更加高大尚的工作“系统调优”,如果这不跟这两哥们搞好关系了,坑的不只有内存,更坑的是你拿着调优的钱却干着随时被调的活.因为作为一个系统运维人员来说监控和优化IO性能这是 ...
- Requery,Refresh,Adoquery.Close,Open 区别
经过测试发现: Requery 相当于 Adq.Close,Open:并且比Close,Open方法有个优点就是不丢失排序,Sort Adq.Close,Open 后,原来的 Adq.Sort 会丢失 ...
- react-dnd 拖拽
介绍 React DnD 是一组 React 高阶组件,可以用来帮你构建复杂的拖拽接口,同时解耦你的组件.React DnD 非常适合像 Trello 和 Storify 这样的应用,在不同地方通过拖 ...
- PHP将emoji表情进行过滤
emoji表情是个麻烦的东西,不仅储存的时候需要处理,而且在PC的显示上需要三方的类库来处理.并且它还是经常更新.... 最近开发新项目的时候明确要求某个字段要过滤emoji表情,在网上找了个方法,亲 ...
- js 时间戳与yyyy-mm-dd或yyyy-MM-dd HH-mm-ss互相转换
首先是获取当前系统时间转换为时间戳 var timestamp = Date.parse(new Date());//获取当前时间 timestamp = timestamp / 1000; 然后是时 ...
- 分享Kali Linux 2017年第11周镜像文件
分享Kali Linux 2017年第11周镜像文件 Kali?Linux官方于3月12日发布2017年的第11周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE ...
- maven打包自动配置数据库链接信息
pom.xml加入下面代码 <profiles> <profile> <id>dev</id> <activation> <activ ...
- [置顶] vue-cli的webpack模板项目配置文件分析
2017-09-11更新:更新到webpack 2.6.1所对应的配置,完善部分代码注释. 由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和c ...