Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XE2: TThread.Start erzeugt Exception (https://www.delphipraxis.net/166397-xe2-tthread-start-erzeugt-exception.html)

Helmi 11. Feb 2012 13:28


XE2: TThread.Start erzeugt Exception
 
Hallo,

in einem Projekt das ich aus Delphi 7 in XE2 portiert habe, erzeuge und starte ich einen Thread so:

Delphi-Quellcode:
  //Thread erzeugen
  MD_Thread := TDatenThread.Create;

  //Priorität festlegen
  MD_Thread.Priority := tpNormal;

  //Thread nach dem Freigeben selbstständig löschen lassen
  MD_Thread.FreeOnTerminate := true;

  //Thread starten
  MD_Thread.Resume;
Unter XE2 wird "Resume" als veraltet angewarnt und man solle "Start" benutzen".

Wenn ich aber nun "Resume" durch "Start" tausche, dann erhalte ich eine Exception:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt NCUpgradeReader.exe ist eine Exception der Klasse EThread mit der Meldung 'Start kann für einen laufenden oder unterbrochenen Thread nicht aufgerufen werden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Klick ich dann auf "Fortsetzen" so läuft der Thread an und alles wird wie gewohnt abgearbeitet.

Nun frag ich mich, warum das Start eine Exception schmeisst?
Da bleib ich dann doch lieber bei "Resume".

[Edit]
Argl! :wall:

Im constructor von TDatenThread war
Delphi-Quellcode:
create(false)
drin.
Deswegen wurde der Thread sofort gestartet. Dann muss er natürlich bei "Start" eine Exception schmeissen

Delphi-Quellcode:
constructor TDatenThread.Create;
begin
  inherited Create(false);

  //StringList erzeugen
end;

himitsu 11. Feb 2012 13:37

AW: XE2: TThread.Start erzeugt Exception
 
Resume und Start sollten eigentlich das Gleoche sein. :gruebel:

Wird dein DatenThread überhaupt Supended (angehalten) erstellt?

[edit]
Nee, ist nicht das Selbe.
Resume und Suspend zählen, wie oft angehalten wurde und behandeln keine Startfehler, wenn der Thread schon läuft, welchen man starten will,
was Start aber macht.

Etwas das schon läuft, das kann man nicht mehr starten. :stupid:

Helmi 11. Feb 2012 13:41

AW: XE2: TThread.Start erzeugt Exception
 
Zitat:

Zitat von himitsu (Beitrag 1150512)
Wird dein DatenThread überhaupt Supended (angehalten) erstellt?

siehe meinem Edit oben

himitsu 11. Feb 2012 13:45

AW: XE2: TThread.Start erzeugt Exception
 
ähhh, sag ich doch :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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