AGB  ·  Datenschutz  ·  Impressum  







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

Threads - Einstellbar

Ein Thema von -187- · begonnen am 24. Mär 2010 · letzter Beitrag vom 25. Mär 2010
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Threads - Einstellbar

  Alt 24. Mär 2010, 22:50
Hier wird erklärt, was ein Stack überhaupt ist. Man kann Elemente darauf werfen und wieder davon herunter holen. Die Frage ist, ob du sowas brauchst, oder nicht eher eine Queue. Es ändert sich die Reihenfolge, in der die Elemente einzeln geholt werden. Wenn du diese beiden Konstrukte nicht kennst, dann würde ich dir echt empfehlen es zu lesen.

Hier mal eine erweiterte StringList. Wenn Fehler auftauchen, musst selbst danach schauen. Ist hier einfach schnell runter programmiert.
Delphi-Quellcode:
TThreadSaveStackStringList = class(TStringList)
private
  FCriticalSection : TCriticalSection; // es brauch hierfür ein Eintrag in der uses-Klausel
public
  procedure Push(const AStr: String);
  function Pop(): String;
  constructor Create(); // irgnedwas kommt hier noch in Klammern ;)
  destructor Destroy();
end;

procedure TThreadSaveStackStringList.Push(const AStr: String);
begin
  FCriticalSection.Enter();
  try
    // für Stack
    Self.Insert(0, AStr); // oder gehört die Parameter tauschen


    // für Queue
    //Self.Add(AStr);
  finally
    FCriticalSection.Leave();
  end;
end;

function TThreadSaveStackStringList.Pop(): String
begin
  FCriticalSection.Enter();
  try
    Result := ''; // Leerstring wird ausgegeben, wenn keine Elemente vorhanden sind
    if (Self.Count > 0) then
    begin
      Result := Self[0];
      Delete(0);
    end;
  finally
    FCriticalSection.Leave();
  end;
end;

constructor TThreadSaveStackStringList.Create();
begin
  inherited Create();
  FCriticalSection := TCriticalSection.Create();
end;

destructor TThreadSaveStackStringList.Destroy();
begin
  FreeAndNil(FCriticalSection);
  inherited Destroy();
end;
Du kannst nun alle Threads auf die beiden Methoden Push und Pop zugreifen lassen und es kommt eigentlich nie zu Problemen. Das regelt die CriticalSection. Es darf sich hierbei nur ein Thread innerhalb von den Zeilen zwischen Enter und Leave befinden, dazu findest viel im Forum.

Du darfst hierbei auch nur Push und Pop nutzen, um auf die Strings zuzugreifen. Besser wäre es sogar, wenn man die StringList kapselt, bin aber zu faul das jetzt noch umzuprogrammieren Vielleicht gibts auch schon einen TStack, schau einfach mal.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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 20:03 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