TTimer 作为组件 属性 问题
TTimer as a component property issue
我已经从 (TShape ) 创建了一个新组件,并且我制作了一个定时器 属性 作为下一个 ::
property Timer:TTimer read FDeviceTimer write SetDeviceTimer ;
这个计时器的目的是我希望它通过使用下一个过程在设计时更改组件高度:
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;
它运行良好,但我在 运行 时间使用它后注意到的问题是它使应用程序太慢了...
任何人都可以解释这种问题的原因和解决方案..
谢谢你
原因:TTimer 与主应用在同一个线程中工作。
解决方案:创建一个循环线程,而不是计时器,直到主组件被销毁。
为此,您可以在组件的构造函数中放入类似这样的东西
FPaintThread := CreateAnonymouseThread(procedure
begin
while assigned(Self) and (not Application.Terminated) do
begin
RepainInstruction;
Sleep(100);
end;
end);
FPaintThread.Start;
但记得使用TThread.Synchronize与主线程对象交互以防止错误。
我已经从 (TShape ) 创建了一个新组件,并且我制作了一个定时器 属性 作为下一个 ::
property Timer:TTimer read FDeviceTimer write SetDeviceTimer ;
这个计时器的目的是我希望它通过使用下一个过程在设计时更改组件高度:
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;
它运行良好,但我在 运行 时间使用它后注意到的问题是它使应用程序太慢了...
任何人都可以解释这种问题的原因和解决方案..
谢谢你
原因:TTimer 与主应用在同一个线程中工作。
解决方案:创建一个循环线程,而不是计时器,直到主组件被销毁。
为此,您可以在组件的构造函数中放入类似这样的东西
FPaintThread := CreateAnonymouseThread(procedure
begin
while assigned(Self) and (not Application.Terminated) do
begin
RepainInstruction;
Sleep(100);
end;
end);
FPaintThread.Start;
但记得使用TThread.Synchronize与主线程对象交互以防止错误。