![]() |
AW: Schlafende Threads
Hi brechi,
Das Terminate in den Destructor zu setzen gefällt mir auch. Aber den geerebten Constructor kannst du auch am Anfang aufrufen. Das ist ein Märchen, dass bei TThread das inherited am Ende des Constructors sitzen muss. Der Thread wird eh erst in der überschriebenen Methode "AfterConstruction" gestartet (sofern createsuspended=false), also erst wenn der komplette Code des Constructors abgearbeitet ist. |
AW: Schlafende Threads
Zitat:
Delphi-Quellcode:
Also muss man wohl zuerst das Event erzeugen (oder man erzeugt es erst in Execute() und handelt sich dafür andere Probleme ein).
constructor TThread.Create(CreateSuspended: Boolean);
var Flags: DWORD; begin inherited Create; AddThread; FSuspended := CreateSuspended; Flags := 0; if CreateSuspended then Flags := CREATE_SUSPENDED; FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID); // <===== end; Zitat:
So richtig nützlich wird das Ganze erst, wenn man noch ein threadsicheren Fifo hinzunimmt, damit DoWork jedes Mal die richtigen Inputdaten bekommt. Aber es scheint ja auch so schon schwierig genug einen TThread mit einem TSimpleEvent zu verheiraten. |
AW: Schlafende Threads
Jetzt weiß ich auch wieder, warum ich nur noch die Kompatibilität bis D7 und bei aktuellen Projekten nur noch bis maximal D2006 gewährleiste
|
AW: Schlafende Threads
Zitat:
Delphi-Quellcode:
procedure TThread.AfterConstruction;
begin if not FCreateSuspended then Resume; end; |
AW: Schlafende Threads
Ich habe den Konstruktor jetzt so geändert:
Delphi-Quellcode:
Ausserdem gibt es noch einen 2. Thread in dem Demo um es einfache Datenübergabe zu zeigen.
constructor TSleepingThread.Create(CreateSuspended: Boolean);
begin inherited Create(True); FEvent := TSimpleEvent.Create; if not CreateSuspended then Resume; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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