![]() |
Delphi-Version: 5
Parameterübergabe an VCL-gestarteten Thread
Hallo Delphifreunde!
Zur Zeit beschäftige ich mich damit, einem VCL-gestarteten Thread Parameter zu übergeben. Dabei möchte ich endlich von den globalen Variablen wegkommen. Luckies Tutorial kenne ich natürlich fast in- und auswendig, aber dort wird dieses Thema allgemein behandelt, nicht auf VCL-gestartete Threads bezogen (sofern ich nicht doch etwas übersah). Auch meine Suche in diesem Forum brachte mich erstmal nicht weiter. Also, ich dachte es mir so:
Delphi-Quellcode:
Das wird klaglos übersetzt und ergibt auch zur Laufzeit keine wahrnehmbaren Programmfehler, dennoch entspricht das Ergebnis nicht meiner Vorstellung. Deshalb kam mir der Verdacht der ungeeigneten Parameterübergabe. Ist es also möglich, auf diese Weise zusätzliche Parameter (also außer dem CreateSuspended) in den Thread einzuschleusen?
type
TestThread=class(TThread) private l, r: word; id: THandle; asc: boolean; protected procedure Execute; override; public constructor Create(CreateSuspended, asc_input: Boolean; links, rechts: word; inputID: THandle);//kein override möglich, da statisch end; constructor TestThread.Create(CreateSuspended, asc_input: Boolean; links, rechts: word; inputID: THandle); begin inherited create(CreateSuspended); l := links; r := rechts; ID := inputID; asc := asc_input end; //...und weitere Threadsfunktionalität, z.B. die Execute-Methode |
AW: Parameterübergabe an VCL-gestarteten Thread
Bin nicht sicher, was genau jetzt dein Problem ist. Das
Delphi-Quellcode:
kannst du dir allerdings sparen, wenn du die Parameter im Constructor übergibst, da der Thread eh erst nach der kompletten Erstellung (in der
CreateSuspended
Delphi-Quellcode:
Methode) gestartet wird.
AfterConstruction
|
AW: Parameterübergabe an VCL-gestarteten Thread
Moin,
also ich mache das so, dass ich den TThread suspended erzeuge und Parameter in Form von Properties setze. |
AW: Parameterübergabe an VCL-gestarteten Thread
Vielen Dank Euch beiden!
Zitat:
Zitat:
|
AW: Parameterübergabe an VCL-gestarteten Thread
Zitat:
|
AW: Parameterübergabe an VCL-gestarteten Thread
Zitat:
Zitat:
Delphi-Quellcode:
Parameter mehr mitgebe und in der Implementierung dann
CreateSuspended
Delphi-Quellcode:
verwende.
inherited Create(false)
|
AW: Parameterübergabe an VCL-gestarteten Thread
Zitat:
Nach erklecklicher Fummelei mit Stundenüberschreitung kann ich mir diese Frage nun selbst wie folgt beantworten: Mit der Threadklasse von Delphi 2 funktioniert es noch nicht, Delphi 3 lasse ich einmal aus, mit der ab Delphi 4 klappt es jedoch eindeutig. Also ein weitgehendes "ja". Es geht demnach tatsächlich einfacher als von Luckie beschrieben, ich kann es kaum glauben. Zitat:
Zitat:
Lasse ich im Konstruktor diese einleitende "inherited create(CreateSuspended)"-Zeile weg, passiert während des Programmablaufes hinsichtlich neuer Threads gar nichts - nicht verwunderlich. Schreibe ich nur "inherited", werden inkompatible Typen vom Compiler angemosert. Bei "inherited create" werden "Nicht genügend wirliche Parameter" angeprangert. Erst bei "inherited create(CreateSuspended)" ist es dem Compiler recht. Wie soll man unter solchen Voraussetzungen an dieser Zeile etwas oder diese Zeile insgesamt weglassen können? Dein Zweifel war zumindest nach meiner Beobachtung also berechtigt. |
AW: Parameterübergabe an VCL-gestarteten Thread
Zitat:
Delphi-Quellcode:
verwenden und dir den
inherited Create(false)
Delphi-Quellcode:
Parameter in deinem eigenen Constructor sparen.
CreateSuspended
Müsstest du aber wie gesagt erst verifizieren, ob unter Delphi 4 die Threads tatsächlich auch erst nach Abarbeiten des Constructors gestartet werden. Wenn du keine Sourcen hast, kannst du ja mal sowohl im Constructor (nach dem
Delphi-Quellcode:
) und direkt zu Begin der
inherited
Delphi-Quellcode:
Methode eine MessageBox einbauen.
Execute
Trifft meine Aussage zu, musst du erst die Constructor MessageBox wegklicken, bevor die Execute MessageBox erscheint. Trifft meine Aussage für Delphi 4 nicht zu, werden beide MessageBoxen simultan angezeigt werden. |
AW: Parameterübergabe an VCL-gestarteten Thread
Was heißt einfacher? Viele Wege führen nach Rom. Und das Kapitel mit dem VCK Thread ist auch eigentlich mehr ein Anhang. Es geht primär um das Erstellen von Threads mit der WinAPI.
|
AW: Parameterübergabe an VCL-gestarteten Thread
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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