Einzelnen Beitrag anzeigen

Benutzerbild von Pussyranger
Pussyranger

Registriert seit: 15. Mär 2011
25 Beiträge
 
Delphi XE2 Architect
 
#1

Zugreif auf ein Array von mehreren Threads

  Alt 24. Sep 2011, 09:02
Hallo,

ich arbeite zum ersten Mal mit Threads und bräuchte deshalb eure Hilfe.
Ich habe eine Threadklasse erstellt, die Berechnungen durchführt und diese dann in einem Array speichert.
Durch diese ButtonClick-Prozedur werden mehrere dieser Threads erstellt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
VAR i: integer;
begin
  for i := 1 to Threads do
  begin
    Thread[i]:=TMeinThread.Create({...});
    Thread[i].OnTerminate:=ThreadDone;
    Thread[i].FreeOnTerminate:=true;
    Thread[i].Resume;
  end;
end;
Die Threadklasse sieht grob so aus:
Delphi-Quellcode:
procedure TMeinThread.Execute;
VAR xxz,yyz: integer;
begin
  //imgwtrd und imghtrd sind in der Größenordnung 500-2000
  for xxz:=0 to imgwtrd do
  begin
    for yyz:=0 to imghtrd do
    begin
      {Berechnungen durchführen}
      Synchronize(Pixel_zeichnen);
    end;
  end;
end;

procedure TMeinThread.Pixel_zeichnen;
begin
  MeinArray[ThreadNotrd,xx,yy]:={Farbe, die auf der Verarbeitung der Berechnung aus Exexute basiert};
  //ThreadNotrd wird im Konstruktor übergeben und ist für jeden gestarteten Thread individuell.
  //MeinArray ist ein global deklariertes Array der MainForm
end;
Obwohl die Prozedur Pixel_zeichnen geschützt mit Synchronize aufgerufen wird, scheinen die Threads wie wild durcheinander auf das Array zuzugreifen.
Was mache ich also falsch?
LG,

Pussyranger
  Mit Zitat antworten Zitat