首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TTimer作为组件属性问题

TTimer作为组件属性问题
EN

Stack Overflow用户
提问于 2021-02-15 06:52:51
回答 1查看 194关注 0票数 1

我已经从(TShape )中创建了一个新组件,并在下面创建了一个Timer属性::

代码语言:javascript
复制
property Timer:TTimer read FDeviceTimer write SetDeviceTimer ;

这个计时器的目的是通过使用下一个过程来改变设计时的组件高度:

代码语言:javascript
复制
procedure TFireDeviceWTimer.OnTimerRepaint(Sender: TObject);
begin
    //==================
    if ChangDim then begin
        Height:=Height+10;
        //Repaint;
        Sleep(FDeviceTimer.Interval);
        ChangDim:=False;
    end 
    else begin
        Height:=Height-10;
        //Repaint;
        Sleep(FDeviceTimer.Interval);
        ChangDim:=true;
    end;
end;

它运行良好,但我在运行时使用它后注意到的问题是,它使应用程序太慢.

有谁能解释一下这一问题的原因和解决办法吗?

谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 04:13:30

原因: TTimer在主应用程序的同一线程中工作。

解决方案:创建一个线程,直到主组件被销毁为止,而不是计时器。

为此,您可以在组件的构造函数中添加如下所示的内容

代码语言:javascript
复制
FPaintThread := CreateAnonymouseThread(procedure
begin
    while assigned(Self) and (not Application.Terminated) do
    begin
        RepainInstruction;
        Sleep(100);
    end;
end);
FPaintThread.Start;

但是,请记住使用TThread.Synchronize与主线程对象交互,以防止bug。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66203795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档