AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Thread richtig beenden

Ein Thema von idefix2 · begonnen am 2. Jun 2015 · letzter Beitrag vom 2. Jun 2015
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Thread richtig beenden

  Alt 2. Jun 2015, 03:12
Was passiert eigentlich (bzw. was muss ich veranlassen, weil es nicht automatisch passiert), wenn die Execute-Methode eines Threads am Ende ist?

Ich möchte das Einscannen von einer Twain-Quelle, das doch eine Weile dauert, in einen extra-Thread verlagern, damit während des Scanvorgangs normal im Programm weitergearbeitet werden kann.
Im Thread wird der Scanvorgang gestartet, die nötigen Infos wie Dateiname etc. werden vorher im Hauptthread erfasst und in Variablen der Thread-Instanz gespeichert, dann wird mittels resume der Thread gestartet).
Irgendwann ist (hoffentlich) die Execute-Methode des Threads am Ende, das Bild ist eingescannt und abgespeichert.
Was muss ich dann noch machen? Geht der Thread dann automatisch in den Status suspended?
Und wie starte ich ihn neu? Einfach mit resume?
Oder muss ich den Thread entsorgen und für einen neuen Scanvorgang eine neuen Instanz erstellen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread richtig beenden

  Alt 2. Jun 2015, 04:43
IMHO beendet sich der Thread und das wars dann.


Bei Delphi-Referenz durchsuchenTThread.FreeOnTerminate=True gibt sich der TThread selber frei und alle eventuell vorhandenen Referenzen werden ungültig.
Ansonsten muß natürlich Thread.Free aufgerufen werden, wie bei jedem anderem Objekt auch.


Bei Delphi-Referenz durchsuchenTThread.CreateAnonymousThread steht es in der OH.


Und ansonsten Delphi-Referenz durchsuchenTTask.


Zitat:
Und wie starte ich ihn neu? Einfach mit resume?
Warum hast du es nicht einfach mal ausprobiert?



Fazit: Der Thread/Execute darf sich nicht beenden.
Und wenn fertig, wartet er auf die nächste Arbeit und macht da weiter, was du natürlich selber implementieren mußt, aber dafür gibt es geschätzt 2,5 Millionen Tutorials.

Oder neuen Thread erstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jun 2015 um 04:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Thread richtig beenden

  Alt 2. Jun 2015, 07:56
Der http://www.delphipraxis.net/185335-b...ab-xe2%5D.html sollte da einfacher für dich sein. Es gibt auch eine Komponente für alles vor XE2.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Thread richtig beenden

  Alt 2. Jun 2015, 10:42
Hallo!

Klassisch würde ich sagen, Du erzeugst einen Thread beim Programmstart der auf einen Event warten (bis alle Daten da sind)
Da setzt Du den Event und der Thread läuft los...Wenn "Er" fertig ist ruft er einen Procedure auf und legt sich wieder schlafen.

Da Du ja immer nur ein Dokument gleichzeitig einliest würde ich es so machen... klassisch...

Oder eben einen anonymen Thread da der Threadstart ja sicherlich nicht Zeitkritisch ist... Wird der Thread halt jedes mal neu erzeugt...

Kommt ein bisschen auf die Delphi-Version an...

Mavarik
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Thread richtig beenden

  Alt 2. Jun 2015, 15:47

Danke für die Antworten. Jetzt werde ich mich damit wohl ein bisschen spielen müssen

@Sir Rufo
Mein Delphi 2009 muss esrt noch etwas wachsen.
Aber ich schau es mir an, vielleicht krieg ich die Komponente ja auch mit Delphi 2009 zum Laufen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Thread richtig beenden

  Alt 2. Jun 2015, 20:17
Ist der Bug eigentlich gefixt, der die Anwendung abschmieren lässt, wenn sie beendet wird, während anonyme Threads noch im Hintergrund werkeln?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Thread richtig beenden

  Alt 2. Jun 2015, 20:28
Nach meiner Erkenntnis mit dem BackgroundWorker, ja (definitiv XE8)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:13 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