![]() |
Thread aus einer Komponente heraus erzeugen?
Hallo,
ich möchte aus einer (visuellen) Komponente heraus einen Thread erzeugen. Ich habe gerade einen Laufbalken als Komponente programmiert und fände es besser, wenn der Timer dazu in einem Extrathread ablaufen würde. So: Thread erzeugen, Timer im Thread, laufen lassen, nach einer Weile Thread schließen. Erscheint mir günstiger. Dabei bin ich aber auf ein Problem gestoßen: Wie erzeuge ich in einer Komponente einen Thread (der auf properties in der Komponente) zugreift. Schon das TThread.create(...): Was muss denn da in die Klammer? Gruß Matthias |
Re: Thread aus einer Komponente heraus erzeugen?
hm, beim TThread kann ich dir nciht weiterhelfen. Wenn du den Thread allerdings manuell via BeginThread erzeugen würdest schon. Das kannst du ja einfach irgendwo in dem code deiner Kompo machen. Um dann auf die properties zugreifen zu können musst du dem Thread nur self als Pointer auf die Parameter übergeben (wenn ich mich recht entsinne).
Das wars dann auch schon. das beenden des Threades solltest du halt nicht vergessen ;) |
Re: Thread aus einer Komponente heraus erzeugen?
Zitat:
Kopy und Paste: Gruß Matthias ;) |
Re: Thread aus einer Komponente heraus erzeugen?
Hallo,
das ging ja schnell. Das ging ja schnell. Danke! Die Frage ist nur, wie und wo erzeuge ich den Thread? Wie gesagt, er soll in und von der Komponente erzeugt werden. Das Thread.create() will aber einen Parameter vom Typ TComonent und den hat man ja in der Komponente nicht. Was nimmt man denn da? Geht NIL auch? Wie kann man einen Thread als Zeitgeber missbrauchen? Das ist mir nicht klar! Ein Timer im Thread ist doch was hübsches... <g> Gruß Matthias |
Re: Thread aus einer Komponente heraus erzeugen?
Halt, falsch!!!
Da habe ich jetzt etwas durcheinander gebracht. Nicht TThread.create will eine Kmpo als Parametzer, sondern TTimer.create. NIL nimmt er da. (Habe ich gerade probiert.) Mal sehen, ob ich den Rest jetzt auch hinkriege... Thread als Zeitgeber? Wie denn das? Gruß Matthias |
Re: Thread aus einer Komponente heraus erzeugen?
Nimm statt nil lieber self, das steht dann für das Objekt(meistens das Formular) von dem es aufgerufen wird. Dann kannst du dir meistens auch sicher sein, dass dein Objekt am Ende auch wieder sinnvoll freigegeben wird.
|
Re: Thread aus einer Komponente heraus erzeugen?
1. Wann erstellst du den Thread? Natürlich im constructor
2. Wann beendest du ihn? NAtürlich im destructor ;) 3. Thread als Zeitgeber? Dazugesagt: ein TTimer ist nicht anderes als ein Thread ;). nunja, da gibts sicher mehrere Möglichkeiten, beipsielsweise ![]() ![]() |
Re: Thread aus einer Komponente heraus erzeugen?
Hallo,
turboPascal schrieb: Zitat:
Außerdem brauche ich ihn wie einen Timer dazu, in festen Zeitabständen etwas auszuführen. Wie geht das nur im Thread. Wie kann man den zeitsteuern? Etwas anderes: Natürlich habe ich zuerst mal self probiert. Aber das geht nicht! TTimer.create wird im Constructor des Threads aufgerufen. Self ist da der Thread selber! TTimer.create will aber als Parameteter ein TComponent! Aber ein TComponent habe ich auch nicht in einer Componentenunit. Der eigentliche Componententyp, den man baut, hat ja zunächst noch keinen Namen bzw. es gibt ja noch keine Instanz davon! Man definiert ja "nur" das Object! Der Thread (mit Timer) soll aber von der Komponente erstellt werden und auf Teile der Komponente zugreifen. Es ist sicher kein Problem, eine Instanz des Threads in der Komponente zu erstellen. Als Objekt wird er aber außerhalb definiert. Die Frage ist nun, wie ich "innerhalb des Threads auf Variable außerhalb", nämlich aus der Komponente (ohne davon eine Instanz zu haben) zugreifen und wie ich die Anzeige der visuellen Komponente aus dem Thread (in der Komponente) synchronisieren kann. Gruß Matthias |
Re: Thread aus einer Komponente heraus erzeugen?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 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 by Thomas Breitkreuz