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