Multi-Threading ist ja schön und gut...Promathika (ein Programm, an dem ich und Euklid schreiben) kann wirklich schnell und auf vielen Cores parallel Funktionswerte, Farbwerte, PostProcessing und mehr berechnen. Jedoch gibt es ein blödes Problem. Ich MUSS die Ergebnisse jedes Threads über den Canvas.Pixels[x,y]:=tColor auf eine Bitmap im Ram schreiben. Wenn ich alle Pixel geschrieben habe, gebe ich das ganze über einen Draw-Befehl an eine Image am Bildschirm. Das bedeutet, dass während der Pixels-Befehl in einer sehr langen Schleife wiederholend aufgerufen wird, gar nicht das Bild sehen möchte, sondern erst, wenn alles fertig ist. Ich glaube, dass der Pixels-Befehl sehr viel Overkill betreibt. Gibt es da was besseres, wenn ich Pixelweise Werte übergeben möchte? Ich habe folgendes versucht, was aber in der Fehlermeldung ausartete: "Abstract Method Called":
Code: Alles auswählen
//Relevanter Auszug aus dem Quellcode
Widge:=tWidgetSet.Create;
Screenbuffer.Canvas.Changing; //ScreenBuffer ist tBitmap
HandleBuf:=Screenbuffer.Canvas.Handle; //(HandleBuf ist vom Typ HDC)
for i:=0 to ClassDrwSet.PerformanceSet.ThreadCount-1 do begin
ResultSize:=ResultSize+length(ErgArray[i]);
for k:=0 to length(ErgArray[i])-1 do begin
Widge.DCSetPixel(HandleBuf,ErgArray[i,k].Punkt.x,ErgArray[i,k].Punkt.y,ErgArray[i,k].Farbe);//<- Hier stand vorher Screenbuffer.canvas.Pixels[ErgArray[i,k].Punkt.x,ErgArray[i,k].Punkt.y]:=ErgArray[i,k].Farbe
end;
end;
Screenbuffer.Canvas.Changed;
Widge.free;
Gruß, Arthur