Delphi FireMonkey 的动画以及多线程

博客作者通过测试验证了在FireMonkey框架下,TThread和TTask.Run在处理动画与网络访问时的线程同步问题。测试表明,即使Indy的网络访问阻塞,也不会影响预设的TFloatAnimation动画。同时,作者创建了两个线程,一个使用TThread,另一个使用TTask.Run,两者都能通过Sleep控制动画暂停和恢复。测试代码已上传至指定链接。

网上看到有人抱怨说在 FireMonkey 框架下做了动画,然后当使用 Indy 做网络访问的时候,因为 Indy 的阻塞,导致动画停止了。他已经把  Indy 访问网络的代码放进线程了,还是让动画停止。抱怨在 FireMonkey 框架下 TThread 有问题不好用。

我就在 Delphi 10.3.3 底下写了个测试程序,测试了一下。发现一切正常。

测试程序里面有三种动画:

1. Delphi 提供的 TFloatAnimation 来让一个 TArc 旋转起来。这个无需写代码,设置几个属性就可以了;

2. 我自己定义了一个 TThread 的子类,在里面跑循环,去驱动一个 TArc 旋转。中间用 Sleep 去阻塞线程,看看线程因为 Sleep 停止后,第一个动画是否被阻塞停止;

3. 另外一个线程的写法,使用 TTask.Run 里面写匿名函数,在该函数里面循环去驱动一个 TArc 旋转。

--------------------

测试结果,符合预期:

1. 第一个动画开始后,不会因为后面两个动画的线程被阻塞而停止动作;

2. 后面两个线程的循环,可以通过 Sleep 让它停下来,动画也因此停下来,也可以解除 Sleep 让它继续,动画也因此继续。

我把例子代码打包发到:https://download.youkuaiyun.com/download/pcplayer/14921189

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值