AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Definition Funktion um Threads zu befüllen
Thema durchsuchen
Ansicht
Themen-Optionen

Definition Funktion um Threads zu befüllen

Ein Thema von SyntaxXx · begonnen am 20. Feb 2015 · letzter Beitrag vom 22. Feb 2015
 
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Definition Funktion um Threads zu befüllen

  Alt 20. Feb 2015, 20:51
Lies mal die Hilfe zu TThread.Synchronize(). Was du vor hast, macht man in der Regel mit CriticalSections, und wessen Member die versorgende Methode letztlich ist, hängt davon nicht ab. CriticalSections stellen sicher, dass zwei Threads (in deinem Fall Mainthread und dein Workerthread) Code nicht gleichzeitig ausführen können, der zwischen dem Einstieg und dem Ausstieg aus der CriticalSection steht. Genutzt wird soetwas zum Beispiel, wenn ein Thread eine Liste eines anderen befüllt. Sowohl der schreibende als auch der lesende Zugriff müssen dabei dann gegeneinander verriegelt werden. Pseudocode:
Delphi-Quellcode:
// Workerthread
procedure TWorkerThread.Execute;
begin
  while not Terminated do
  begin
    if not List.IsEmpty then
    begin
      MyCriticalSection.Enter;
      try
        DoSomethingWith(List[0]);
        List.Delete(0);
      finally
        MyCriticalSection.Leave;
      end;
    end;
  end;
end;

procedure TWorkerThread.AddListItem(aListItem: TListItem);
begin
  MyCriticalSection.Enter;
  try
    List.Add(aListItem);
  finally
    MyCriticalSection.Leave;
  end;
end;

// Hauptthread
procedure TForm1.OnButton1Click(Sender: TObject);
begin
  WorkerThread.AddListItem(TListItem.Create(foo, bar));
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 12:47 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