Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#40

AW: Threads und TBitmaps

  Alt 1. Sep 2014, 18:24
@Medium ich denke es hängt von den Anforderungen ab, mit Synchronisierung egal ob Canvas.Lock oder eigenen CriticalSections wird es bei mehreren fast so langsam dass man es auch im Hauptkontext laufen lassen könnte und ohne kommt es definitiv zu Fehlern, was leicht zu zeigen ist:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TTestThread=Class(TThread)
    private
    FFn:String;
    public
    Constructor Create(fn:String);overload;
    Procedure Execute;override;
  End;

var
  Form2: TForm2;

implementation

{$R *.dfm}

{ TTestThread }

constructor TTestThread.Create(fn: String);
begin
  inherited Create(false);
  FFn := fn;
end;

procedure TTestThread.Execute;
var
 bmp :TBitmap;
 i:Integer;
begin
  inherited;
   bmp :=TBitmap.Create;
   bmp.Width := 100;
   bmp.Height := 100;
   bmp.Canvas.Pen.Color := clBlue;
   for I := 0 to 100 do
   begin
     bmp.Canvas.MoveTo(0,0);
     bmp.Canvas.LineTo(100,i);
   end;
   bmp.SaveToFile('C:\temp\test\' + Ffn );
   bmp.Free;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 i:Integer;
begin
   for I := 0 to 20 do TTestThread.Create(IntToStr(i)+'.bmp');
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 1. Sep 2014 um 18:32 Uhr)
  Mit Zitat antworten Zitat