Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threadphänomen. Threads terminieren nicht richtig (https://www.delphipraxis.net/70889-threadphaenomen-threads-terminieren-nicht-richtig.html)

Piberg 6. Jun 2006 13:28


Threadphänomen. Threads terminieren nicht richtig
 
Hallo Leute!

Habe folgende Konstellation:
Ein Thread (weiter als Monitorthread) erzeugt und ruft abwechselnd zwei Threads (weiter als KinderThreads) auf.
Diese KinderThreads setzen einzelnd Zeichen ( der eine 'a' bis 'z', der andere '1' bis '9' ) auf der seriellen Schnittstelle ab
und terminieren anschließend.
Nun beobachte ich folgendes Phänomen: Wenn ich den MonitorThread terminiere und dann irgendwann wieder neu erzeuge,
nimmt das zuletzt laufende KinderThread seine Arbeit dort auf, wo er aufhörte, nachdem der Monitorthread terminierte.

z.B '123456789ABCDERF' <MonitorThread terminiert> .... <Neuer MonitorThread erzeugt> 'GHIJKLMNO' <MonitorThread terminiert> .... <Neuer MonitorThread erzeugt> 'PQRST' usw...

Hier ist die Execute des MonitorThreads:
Delphi-Quellcode:
procedure TMonitorThread.Execute;
var T1, T2 : TerzeugerThread;
begin
  while NOT Terminated do
  begin

    T1 := TErzeugerThread.CreateThread(FALSE, '1', '9');
    T1.Priority := tpLowest;
    T1.Resume;
    T1.WaitFor;
    T1.Free;


    T2 := TErzeugerThread.CreateThread(FALSE, 'A', 'Z');
    T2.Priority := tpLowest;
    T2.Resume;
    T2.WaitFor;
    T2.Free;

  end;
end;
Hat Jemand eine Idee, wie sich das erklären lässt? Denn für mich hat es den Anschein, als würde der zuletzt laufende KinderThread nur "schlafengelegt", der dann
später seine Arbeit fortsetzt. Erst danach werden neue Kinder im MonitorThread erzeugt.

Olli 12. Jun 2006 09:41

Re: Threadphänomen. Threads terminieren nicht richtig
 
Zitat:

Zitat von Piberg
Hat Jemand eine Idee, wie sich das erklären lässt? Denn für mich hat es den Anschein, als würde der zuletzt laufende KinderThread nur "schlafengelegt", der dann
später seine Arbeit fortsetzt. Erst danach werden neue Kinder im MonitorThread erzeugt.

Den Eindruck gewinne ich auch, allerdings läßt sich mit dem bißchen Code nicht viel anfangen um eine detaillierte Erklärung zu liefern.


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