AGB  ·  Datenschutz  ·  Impressum  







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

Thread, Beendigung, IDE

Ein Thema von haentschman · begonnen am 1. Sep 2015 · letzter Beitrag vom 1. Sep 2015
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#1

Thread, Beendigung, IDE

  Alt 1. Sep 2015, 06:25
Hallo Alle...

Ich hätte gern mal ein Problem...

Ich arbeite gern und viel mit WorkerThreads. Dafür benutze ich keine Bibliothek wie Omni sondern ein einfaches Konstrukt für TThread in Kombination mit einer Liste dafür. Die Threads melden ihre Fertigstellung über eine Message bei der Liste an und die Liste trägt ihn aus.

Soweit so gut funktioniert das stabil und zuverlässig. Bei dem aktuellen Projekt dauert es aber nach dem CloseQuery der Form beim Beenden ca.5 Sekunden bis der Prozess, ohne Fehler und Speicherlecks, wieder in die IDE zurückkehrt.
Der Debugger sagt vor dem Schließen:
1 Thread erzeugt
1 Thread in Liste
1 Thread Terminated
1 Thread freigegeben
...also Alles wie es sein soll.

Starte ich die Worker Threads nicht, kommt die IDE sofort zurück. Es hat also was damit zu tun. Wie kann ich herausfinden was das "Beenden" blockiert? Der Thread läuft definitiv nicht mehr.

Danke...

Geändert von haentschman ( 1. Sep 2015 um 06:30 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Thread, Beendigung, IDE

  Alt 1. Sep 2015, 06:41
Meine Glaskugel sagt, das Du im 'WaitForSingleObject' 5 Sekunden wartest.

Aber ehrlich gesagt: Wie soll man das ohne Code wissen? Zeig mal den Code deines Threads.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#3

AW: Thread, Beendigung, IDE

  Alt 1. Sep 2015, 07:47
Bitteschön die Unit...

Beim Beenden und dem Clear der Liste im Destruktor ist der Count 0. Wenn ich die Threads programmtechnisch via StopAllWorker "abbreche" kommt das Program sofort in die IDE zurück. Wenn ich den Thread fertig laufen lasse wird der Thread genauso ausgetragen(gleiche Debugger Steps). Aber dann braucht´s ca. 5 Sekunden bis in die IDE.
In der Threadverwaltung sind dann plötzlich 2 Threads gelistet die nach dem FormCloseQuery erst eröffnet werden. Keine Ahnung wo die hingehören.

Zugegeben, ich bin ratlos. Ich glaube nicht, das das mit meinen Workern zusammenhängt. Ich glaube eher an die visuellen Componenten welche im Hintergrund noch aufräumen. Der Status der Progressbar und des StepControls ist bei den verscheidenen "Abbruchvarianten" unterschiedlich.
Angehängte Dateien
Dateityp: pas dWorkerList.pas (4,4 KB, 18x aufgerufen)

Geändert von haentschman ( 1. Sep 2015 um 07:57 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Thread, Beendigung, IDE

  Alt 1. Sep 2015, 08:03
Möchtest du vielleicht auch noch einen Dreizeiler dazulegen wie man das benutzen soll?

Und warum das "of object"? Ich hasse das, warum soll ich keine anonymen Methoden übergeben können? Mach doch bitte "reference to procedure(..)".
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#5

AW: Thread, Beendigung, IDE

  Alt 1. Sep 2015, 08:12
Handling:

1. eigenen Worker bauen mit = class(TWorker)
2. Worker Liste instanzieren
3. Worker instanzieren
4. Worker in die Liste legen.
5. der Rest geht fast von selbst...
6. Das Wegwerfen der Liste hat ein koordiniertes Aufräumen der Threads zur Folge. (selbstverständlich sollte im Thread, je nach Komplexität, mehrfach auf Terminated geprüft werden. Sonst läuft der Thread logischerweise bis zum Ende durch )

PS. Ich bin grad am Ausbauen der Visuellen Rückmeldungen. Mal schauen.

Zitat:
Und warum das "of object"? Ich hasse das, warum soll ich keine anonymen Methoden übergeben können? Mach doch bitte "reference to procedure(..)".
..erklär mal genauer warum du das nicht magst. Oder anders: Was ist daran falsch?

Geändert von haentschman ( 1. Sep 2015 um 08:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Thread, Beendigung, IDE

  Alt 1. Sep 2015, 08:36
Ok vielleicht verstehe ich es nicht...

Aber der Teil, der die Arbeit auf die Worker verteilt fehlt...
Was Du angefügt hast ist doch nicht anderes wie ein Threadrumpf und eine Liste die Threads verwaltet.

Wo ist der Sync, der Wait, der Terminate usw.
  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 16:20 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