AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Optimierung durch Threads

Ein Thema von uuulf · begonnen am 18. Jul 2009 · letzter Beitrag vom 18. Jul 2009
 
uuulf

Registriert seit: 2. Jul 2009
4 Beiträge
 
#1

Optimierung durch Threads

  Alt 18. Jul 2009, 18:25
Hallo Delphi-Gemeinde,

ich arbeite zur Zeit an einer Software zur Ansteuerung einer IP-Kamera über deine DLL im Rahmen meines Studiums. Daraus ergibt sich für mich die Frage, ob ich mit Threads den Bildaufbau (TBitmap) beschleunigen kann. Genauer geht es hier um den parallelen Zugriff auf den Arbeitsspeicher.

Zur Erklärung:

Die DLL ruft meine Callbackfunktion auf nachdem Sie die Bilddaten in den Arbeitsspeicher geschrieben hat. Dabei übergibt diese mir eine Referenz für ein Bild.
Delphi-Quellcode:
function TCamera.Callback(image: Pointer): Integer;
var
 data: ^Byte;
begin
 //Aufruf einer DLL-Funktion
 //Nun hole ich mir für dieses Bild den Pointer auf den Arbeitsspeicher, wo die Bilddaten liegen.
 //data als Var-Parameter übergeben
  getImage(image, Pointer(data));
end;
Anschließend beschreibe ich das TBitmap, hier der wesentliche Code

Delphi-Quellcode:
type
  TRGBTripleArray = ARRAY[WORD] OF TRGBTriple;
[..]
var
 Row_c: ^TRGBTripleArray;
[..]
bitmap := TBitmap.Create;
bitmap.PixelFormat := pf24Bit;
for j:= 0 to Bitmap.Height-1 do
begin
  Row_c := Bitmap.ScanLine[j];
  for i:= 0 to bitmap.Width-1 do
  begin
    with Row_c[i] do
    begin
      rgbtRed:= data^;
      Inc(data);
      rgbtGreen := data^;
      Inc(data);
      rgbtBlue := data^;
      Inc(data);
    end;
  end;
end;

image1.Picture.Bitmap.Assign(bitmap); //image1 = TImage
bitmap.free;
Nun der dll noch mitteilen, dass ich bereit für das nächste Bild bin
setImage(image); Jetzt wird die Callbackfunktion erneut aufgerufen.

Jetzt zur Frage:
1. Inwiefern kann ich durch Threads zur Optimierung beitragen?
Die Idee ist die, dass die TBitmap-Bearbeitung in einem eigenen Thread abläuft. Die Callbackfunktion beinhaltet also:

getImage(image, Pointer(data));
//Thread wird gestartet: Beschreibt TBitmap(Code: s.oben)
setImage(image);

Vorteil: Der Pointer auf die Bilddaten des nächsten Bildes liegt durchweg bereit. Hier wird also Ressource "DLL" und Ressource "Arbeitsspeicher" gleichzeitig genutzt.

2. Ist es sinnvoll mehrere Threads mit den Bearbeiten des TBitmaps zu beauftragen?
Soll heißen sobald Pointer auf Bilddaten vorliegt übergebe diesen an einen "Thread-Pool".
Vorteil: Mehrere TBitmaps werden gleichzeitig beschrieben.
Gretchenfrage: "Bremsen" sie sich nicht gegenseitig aus, da der "Thread-Pool" auf der gleichen Ressource - den Arbeitsspeicher - arbeitet?

Mir ist klar, dass es im Grunde geht. Nur ist nicht die Frage ob es nebenläufig zu bearbeiten geht, sondern ob dadurch ein Performancegewinn erzielt werden kann.

Gruß und danke vorab.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz