AGB  ·  Datenschutz  ·  Impressum  







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

[Threads] Textureloader - Einige Fragen

Ein Thema von Zwoetzen · begonnen am 20. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#1

Re: [Threads] Textureloader - Einige Fragen

  Alt 20. Nov 2008, 18:22
Danke für die Antwort, Sirius

Punkt 3 ist gut erklärt, jetzt habe ich eine bessere Vorstellung, was im Hintergrund beim Aufruf von Synchronize passiert.

Zu den drei anderen Punkten: Ich habe jetzt mal eine TThreadQueue (eigentlich eher eine TThreadObjectQueue, is aber zu lang xD) erstellt, die die CriticalSections enthält, nur bin ich nicht sicher, ob ich das so richtig verstanden und umgesetzt habe. (Hab versucht, mich an die TThreadList zu halten) Vor allem beim Destroy bin ich mir unsicher: Wer wäre jetzt für das Freigeben der noch vorhandenen Jobs verantwortlich? Die ThreadQueue selbst, weil sie diese ja "in Bearbeitung" hat, oder der TextureLoader, der die Jobs angelegt hat? (Hatte mal was gehört von dort Freigeben, wo sie angelegt wurden, demnach müsste sich der TextureLoader drum kümmern.)

Delphi-Quellcode:
type
  TThreadQueue = class(TObjectQueue)
    private
      FLock: TRTLCriticalSection;
    public
      constructor Create;
      destructor Destroy; override;

      function Push(AObject: TObject): TObject;
      function Pop: TObject;
      function Peek: TObject;
  end;

[...]

constructor TThreadQueue.Create;
begin
  inherited Create;
  InitializeCriticalSection(FLock)
end;

destructor TThreadQueue.Destroy;
begin
  EnterCriticalSection(FLock);
  try
    // Entweder die ThreadQueue kümmert sich ums freigeben, oder der TextureLoader muss es...
    while (List.Count <> 0) do
      (inherited Pop).Free;

    inherited Destroy;
  finally
    LeaveCriticalSection(FLock);
    DeleteCriticalSection(FLock);
  end;
end;

function TThreadQueue.Push(AObject: TObject): TObject;
begin
  EnterCriticalSection(FLock);
  try
    Result := inherited Push(AObject);
  finally
    LeaveCriticalSection(FLock);
  end;
end;

function TThreadQueue.Pop: TObject;
begin
  EnterCriticalSection(FLock);
  try
    Result := inherited Pop;
  finally
    LeaveCriticalSection(Flock);
  end;
end;

function TThreadQueue.Peek: TObject;
begin
  EnterCriticalSection(FLock);
  try
    Result := inherited Peek;
  finally
    LeaveCriticalSection(FLock);
  end;
end;
Des weiteren verstehe ich den Punkt mit den Events nicht wirklich. Habe noch nie mit Events gearbeitet, und weiß somit nicht, wie ich das jetzt machen muss. Könntest du (oder jemand anderes ) einen Beispielcode geben? (Oder direkt in meine ThreadQueue einbauen, wäre noch besser )
Nur soviel habe ich herausgefunden: WaitForSingleEvent gibts nicht, sollte wohl WaitForSingleObject heißen
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:42 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