Einzelnen Beitrag anzeigen

wangxuebing

Registriert seit: 17. Feb 2012
7 Beiträge
 
#1

Multithreading Systemressourcen erschöpft

  Alt 5. Jun 2012, 10:13
Hallo,

ich arbeite an einem Programm, das verschiedene Bilder bearbeitet. Zur Beschleunigung wollte ich Threads verwenden. Leider bekomme ich dabei die Fehlermeldung "Systemressourcen erschöpft", was ich mir nicht so ganz erklären kann (64bit System, 16GB RAM, 8 Kerne)
Der Code sieht grob folgendermaßen aus:

Code:
procedure MyThread.Execute();
var
  BMP1, BMP2 : TBitMap;
  i, j : Integer;
begin
  BMP1.Create;
  BMP2.Create;
  for i := LOW to HIGH do
  begin
    for j := LOW to HIGH do
    begin

    Berechne(x1, y1, x2, y2, PosX1, PosY1, PosX2, PosY2);

    BMP1.Setsize(x1,y1);
    BitBlt(BMP1, 0, 0, BMP1.width, BMP1.height, ThreadBMP, PosX1, PosY1);

    BMP2.Setsize(x2,y2);
    BitBlt(BMP2, 0, 0, BMP2.width, BMP2.height, ThreadBMP, PosX2, PosY2);

    /// vergleiche BMP1 und BMP2

    BMP1.SaveToFile(Filename);

    end;
  end;

  BMP2.Free;
  BMP1.Free;
end;
Die ThreadBMP ist eine private TBitMap vom Thread und wird beim create des Threads geladen (jeder Thread lädt eine andere Datei). LOW und HIGH sind feste Werte, die ich vorher schon berechnet habe.
Das Programm stürzt mal bei "SetSize()" und mal bei "SaveToFile" mit oben genannter Fehlermeldung ab.

Hat jemand eine Idee woran das liegen könnte?
Ich befürchte ja, dass es an den TBitMap liegt, aber jeder Thread hat ja seine eigenen lokalen Bitmaps und somit sollten sich die Threads eigentlich nicht in die Quere kommen...

Danke für eure Hilfe,
WXB
  Mit Zitat antworten Zitat