AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Seltsamer Programmfehler (Delphi schließt sich)
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsamer Programmfehler (Delphi schließt sich)

Ein Thema von blackdrake · begonnen am 4. Jan 2012 · letzter Beitrag vom 7. Jan 2012
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.367 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 07:10
Delphi-Quellcode:
  z := TMySendingThread.Create(true);
  z.FreeOnTerminate := true;
  z.Resume;
Lass den Blödsinn mit suspended erzeugen und Resume, dann wird es wahrscheinlich auch keine Probleme mehr geben...

FreeOnTerminate + Resume ist eine Kombination, bei der Probleme vorprogrammiert sind. Nicht ohne Grund ist Resume mittlerweile als deprecated markiert.
Eins der möglichen Probleme: Resume ist noch nicht fertig, wenn der Thread schon fertig ist und freigegeben wird. Rumms...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 08:18
Also ich halte das nicht für Blödsinn, denn nichts anderes passiert, wenn man den Thread mit 'CreateSuspended=False' instantiiert: Er wird erst 'Suspended' erzeugt (in jedem Fall) und im AfterConstruction ggfs. per 'Resume' aufgeweckt.

Die Resume-Methode ist deprecated, weil viele Programmierer damit Threads zwischendurch anhalten bzw. wieder weiterlaufen lassen. Und DAS ist eine schlechte Idee.

Edit:... oh, es ist doch nicht geschickt, so wie es umgesetzt ist, ich bezweifle aber, das das Probleme bereitet.

Ich mache das mit dem Initialisieren immer im abgeleiteten Konstruktor:
Delphi-Quellcode:
Constructor TMyThread.Create;
Begin
  inherited Create(True);
  InitializeMyThreadStuff();
  Resume;
End;
und das ist so überflüssig (aber deklarativ).

Geändert von Furtbichler ( 7. Jan 2012 um 08:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 08:23
Ich mache das mit dem Initialisieren immer im abgeleiteten Konstruktor:
Delphi-Quellcode:
Constructor TMyThread.Create;
Begin
  inherited Create(True);
  InitializeMyThreadStuff();
  Resume;
End;
Wozu das Resume?
Der Thread wird doch sowieso immer erst nach der Create-Methode gestartet. (wenn man es nicht suspended startet)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Jan 2012 um 09:48 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 08:36
Hi,
Eben. Ich schrieb ja, ...
...das ist so überflüssig (aber deklarativ).
Mit "deklarativ" meine ich, das der Code beschreibt, was (sowieso im Hintergrund) geschieht.

Und, ich muss zu meiner Schande gestehen, das ich eben erst (durch Studium des Classes-Quellcodes) entdeckt habe, das meine Vorgehensweise gut gedacht aber vollkommen überflüssig ist.

Los, nun hack noch weiterauf meinem Unvermögen rum.
Es regnet sowieso.
Das Wochenende ist versaut.

Muhuuuhhhuuuu.

  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 09:50
Soll ich?

Neuerdings soll man Delphi-Referenz durchsuchenTThread.Start und nicht Delphi-Referenz durchsuchenTThread.Resume verwenden.



Ach ja nachträglich den Thread über diese Methoden zu Pausieren ist auch verboten.



Nja, zumindestens ist es nicht unbedingt "schlimm", wenn man einen Thread suspendet startet ... es ist nur "unschön".
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Seltsamer Programmfehler (Delphi schließt sich)

  Alt 7. Jan 2012, 10:21
Die Resume-Methode ist deprecated, weil viele Programmierer damit Threads zwischendurch anhalten bzw. wieder weiterlaufen lassen.
Sie ist auch deprecated weil es beim Aufruf von Resume eventuell keinen Thread mehr gibt. Beim ersten Start eines Threads der im Suspended-Modus erzeugt wurde ist ein Resume noch sicher - später aber nicht mehr.

Die Forumsdiskussion dazu unter https://forums.embarcadero.com/messa...messageID=3466 ist leider nicht mehr vorhanden.

Siehe auch: TThread.resume is deprecated in Delphi-2010 what should be used in place?
Michael Justin
habarisoft.com
  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 21:14 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