AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Threads THreadList und lesen/schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Threads THreadList und lesen/schreiben

Ein Thema von Memnarch · begonnen am 17. Jan 2011 · letzter Beitrag vom 17. Jan 2011
 
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Threads THreadList und lesen/schreiben

  Alt 17. Jan 2011, 17:45
NAbend,
Ich zermatter mir mal wieder den Kopf mit dne Threads.

Folgendes:

Ich habe eine TThread list, in dieser liste wird eine anzahl von X bildern vorgebuffered, und wnen benötigt ausgelesen.

Der Hauptthread will einfach nur die benötigten bilder auslesen. Der Thread der sich um den Buffer kümmert, guckt immer bei welchem bild der Hauptthread gerade ist, und wnen die distanz zum bifferende zu klein wird, werden wieder x bilder nachgeladen.

Das problem ist, das zwar alle bilder reingeladen, aber nicht mehr ausgelesen werden können, es gibt keine fehlermeldung, nur nen leeres Layered Window. Zu allem überfluss scheint es nichtmal möglich abzufragen, ob die Liste noch gelockt ist.
Kann mir jemand helfen? Ich habe Threads noch NIE wirklich hinbekommen, wne ein Thread schreibt und der andere ausließt.

Code:
procedure TMemoryManager.Execute;
var
  i: Integer;
  LPContainer: TPicContainer;
  LBitmap: TBitmap;
  LList: TList;
begin
  inherited;
  Self.FPos := 0;
  GPicList := TThreadList.Create;
  GPicList.Duplicates := dupAccept;
  GLock := False;
  LLIst := GPicList.LockList;
  for i := 0 to 5478 - 1 do
  begin
    LPContainer := TPicContainer.Create;
    LPContainer.FBitmap := TBitmap.Create;
    LList.Add(LPContainer);
  end;
  GPicList.UnlockList;
  while( not Self.Terminated) do
  begin
    if(Self.FPos - GAnimPos < 5)then
    begin
      for i := 0 to 50 - 1 do
      begin
        LList := GPicList.LockList;
        try
          LPContainer := TPicContainer(LList.Items[Self.FPos]);
          LPContainer.FBitmap.SetSize(Screen.Width, Screen.Height);
          LoadIdToImage(Self.FPos, LPContainer.FBitmap);
          Self.FPos := Self.FPos + 1;
        finally
          GPicLIst.UnlockList;
        end;
      end;
    end
    else
    begin
      sleep(20);
    end;
  end;
end;
un die bild funktion:

Code:
procedure LoadFastIdToImage(AId: Integer; ABitmap: TBitmap);
var
  LList: TLIst;
begin
  LList := GPicList.LockList;
  try
    ABitmap.Assign(TPicContainer(LList.Items[AId]).FBitmap);
  finally
    GPicList.UnlockList;
  end;
end;
  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 01:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz