Einzelnen Beitrag anzeigen

moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Datenkopie für Thread anders erzeugen

  Alt 27. Apr 2009, 13:41
Moin !

Muss mich korrigieren. So gehts:
Delphi-Quellcode:
TTestThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    Stream : TMemoryStream;
    Pic : TBitmap;
    constructor Create(const Picture : TBitmap);
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TTestThread.Create(const Picture : TBitmap);
begin
  inherited Create(True);
  FreeOnTerminate := True;

  Stream := TMemoryStream.Create;
  Pic := Picture;
end;

procedure TTestThread.Execute;
begin
  Pic.SaveToStream(Stream);
  Stream.Position := 0;
  Stream.SaveToFile('Test.bmp');
end;

procedure TForm1.Button1Click(Sender: TObject);
var BlobThread : TTestThread;
begin
  BlobThread := TTestThread.Create(Image1.Picture.Bitmap);
  BlobThread.Priority := tpLower;
  BlobThread.Resume;
end;
Aber ist das dann niicht im Endeffekt das gleiche als wenn ich schreiben würde (in Execute):
Image1.Picture.Bitmap.SaveToStream(Stream); Das führt ja nachweislich zu einem Crash.

Wo ist dann jetzt der Unterschied?

Übergebe ich so dem Create dann einen Pointer?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat