AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Threads bleiben stehen nach Aktualisierung
Thema durchsuchen
Ansicht
Themen-Optionen

Threads bleiben stehen nach Aktualisierung

Ein Thema von Tormentor32 · begonnen am 25. Mai 2007 · letzter Beitrag vom 25. Mai 2007
Antwort Antwort
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#1

Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 08:16
Hallo Leute!

Ich habe ein Problem! Ich habe eine Klasse geschrieben, die mehrere Threads verwaltet, diese Threads haben die Aufgabe, einen bestimmten Host anzupingen (Per IdIcmpClient) Das klappt auch alles. Die Ergebnisse werden in eine Containerklasse geschrieben, die eine TThreadlist kapselt.

In dieser Containerklasse gibt es jetzt die Methode UpdateListbox(SL: TStrings) Diese Methode wird zum Beispiel über einen Buttonklick ausgelöst (!!Extern!!)

Das updaten der Listbox funktioniert, aber danach bleiben die Threads einfach stehen. Der Threadstatus ist aber weiterhin "Ausführbar". Der gesetzte Breakpoint in der "While-not-Terminated" schleife wird nicht mehr erreicht.

Die UpdateListbox Prozedur sieht so aus:
Delphi-Quellcode:
procedure TPingResultList.UpdateListbox(SL: TStrings);
var i: integer;
begin
  SL.Clear;
  if FPingResults.LockList.Count > 0
    then
      for i := 0 to FPingResults.LockList.Count - 1 do
        begin
          SL.Add(TPingResult(FPingResults.LockList.Items[i]).StringResult)
        end;
end;
In jedem Thread befindet sich ein Pointer auf diese Liste, damit Einträge hinzugeügt werden können.

Woran liegt das? Wie kann ich das umgehen?

Gruß und danke schonmal

Richard
Richard Mahr
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 09:57
Zitat von Tormentor32:
In jedem Thread befindet sich ein Pointer auf diese Liste, damit Einträge hinzugefügt werden können.
Kann das sein, daß die Liste noch auf Lock steht, und die Threads auf das Unlock der Liste warten?

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 10:06
seh ich das richtig? du greifst von den Threads aus auf die Listbox zu?
hast du im Thread mal einen Haltepunkt gesetzt bzw. durchgesteppt um zu sehen wo er letzendlich hängt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 10:17
Nein, das siehst du nicht richtig

Ich habe eine Weitere Klasse, die die Ergebnisse verwaltet, vom Thread aus gibts da lediglich einen Pointer, der auf diese Liste zeigt. Diese Liste hat eine UpdateListbox procedure, die ich Über einen Button von meiner MainForm auslöse. Das mit dem Unlock könnte schon stimmen, aber wie muss ich das Einbauen? Ich habs so
Delphi-Quellcode:
  SL.Clear;
  if FPingResults.LockList.Count > 0
    then
      for i := 0 to FPingResults.LockList.Count - 1 do
        begin
          SL.Add(TPingResult(FPingResults.LockList.Items[i]).StringResult)
        end;
  FPingResults.UnlockList;
probiert, aber der Effekt ist exakt gleich...

Oder hab ich das mit Unlock falsch verstanden? Es ist halt so, dass die Threads nicht mehr weitermachen, also das mit dem Lock kommt hin, aber so wie oben klappts jedenfalls auch nicht...

Danke für eure Anteilnahme
..............................................
@ dein Edit:

Ja ich hab nen Breakpoint in den Thread gelegt, der hängt dann da, wo er aufgehört hat... also MUSS das mit dem Lock/Unlock zu tun haben aber wie muss ich es richtig verwenden???
Richard Mahr
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 10:35
Nee nee, das hast Du etwas falsch verstanden. LockList gibt dir eine Liste zurück, in der Du dann exklusiv rumwuseln kannst. Wenn Du fertig bist, dann rufst du 'UnlockList' auf:

Delphi-Quellcode:
Var
  MyList : TThreadList;

...

Procedure TMyThread.ProcessList;
Var
  lLocal : TList;

Begin
  lLocal := MyList.LockList;
  Try
    -- hier lLocal verändern
  Finally
    MyList.UnlockList;
  End
End;
'LockList' liefert nicht nur die Liste zurück, sondern sperrt jeden weiteren Versuch, LockList aufzurufen. Daher hängt dein Thread auch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Threads bleiben stehen nach Aktualisierung

  Alt 25. Mai 2007, 10:55
Ich hab das jetzt so gemacht und es funktioniert!

Delphi-Quellcode:
SL.Clear;
  try
  with FPingResults.LockList do
    begin
      if Count > 0
        then
          for i := 0 to Count - 1 do
            begin
              SL.Add(TPingResult(Items[i]).StringResult)
            end;
    end;
  finally
    FPingResults.UnlockList;
  end;
Hatte nicht bedacht, dass bei jedem Aufruf von Locklist... klingt irgendwie blöd ich weiß... die Liste gelockt wird

Danke Euch!
Richard Mahr
  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 06:39 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