Registriert seit: 23. Jan 2008
3.686 Beiträge
Delphi 2007 Enterprise
|
AW: TimeSetEvent / Canvas / Thread?
2. Nov 2011, 11:58
Du sprichst von Threadsicher im Zusammenhang mit einem Timer. Der Timer ist aber kein Thread! Dein Vorhaben würde ich nämlich tatsächlich mit einem (echten) Thread angehen. Mal eine Pseudoklasse:
Delphi-Quellcode:
type
TMyAnimation = class(TThread)
private
FBitmap: TBitmap;
FTargetCanvas: TCanvas;
procedure DrawFrame;
protected
procedure Execute; override;
public
constructor Create(aCanvas: TCanvas);
destructor Destroy; override;
end;
implementation
constructor TMyAnimation.Create(aCanvas: TCanvas);
begin
inherited Create(false);
FTargetCanvas := aCanvas;
FBitmap := TBitmap.Create;
end;
destructor TMyAnimation.Destroy;
begin
FBitmap.Free;
end;
procedure TMyAnimation.DrawFrame;
begin
FTargetCanvas.Draw(FBitmap.Canvas, ... ...);
end;
procedure TMyAnimation.Execute;
var
loopBeginTickCount: Int64;
const
MS_PER_FRAME = 50;
begin
repeat
loopBeginTickCount := GetTickCount;
// FBitmap mit neuem Frame bestücken, was auch immer das ist
Synchronize(DrawFrame);
Sleep(Max(MS_PER_FRAME - (GetTickCount-loopBeginTickCount), 1));
until Terminated;
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
Geändert von Medium ( 2. Nov 2011 um 12:00 Uhr)
|