Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Thread aus einer Komponente heraus erzeugen? (https://www.delphipraxis.net/76823-thread-aus-einer-komponente-heraus-erzeugen.html)

Mattze 10. Sep 2006 16:38


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

Meflin 10. Sep 2006 16:42

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 ;)


turboPASCAL 10. Sep 2006 16:42

Re: Thread aus einer Komponente heraus erzeugen?
 
Zitat:

Zitat von Mattze
...Timer im Thread, laufen lassen...

Wozu das denn, den Thread selbst kannst du doch verwenden als ""Zeitgeber".

Kopy und Paste:

Gruß
Matthias ;)

Mattze 10. Sep 2006 18:47

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

Mattze 10. Sep 2006 18:52

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

BenjaminH 10. Sep 2006 19:03

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.

Meflin 10. Sep 2006 19:14

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 MSDN-Library durchsuchenGetTickCount (gibts das hoffentlich nicht nur in PHP :mrgreen:) oder MSDN-Library durchsuchenQueryPerformanceCounter


Mattze 11. Sep 2006 16:36

Re: Thread aus einer Komponente heraus erzeugen?
 
Hallo,

turboPascal schrieb:

Zitat:

Wozu das denn, den Thread selbst kannst du doch verwenden als ""Zeitgeber".
Da ich mir das absolut nicht voprstellen kann, meine Frage, wie das geht.
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

Meflin 11. Sep 2006 16:47

Re: Thread aus einer Komponente heraus erzeugen?
 
Zitat:

Zitat von Mattze
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?

Habe ich doch im Post vor deinem geschrieben :gruebel:
Zitat:

3. Thread als Zeitgeber? Dazugesagt: ein TTimer ist nicht anderes als ein Thread . nunja, da gibts sicher mehrere Möglichkeiten, beipsielsweise MSDN-Library durchsuchenGetTickCount (gibts das hoffentlich nicht nur in PHP ) oder MSDN-Library durchsuchenQueryPerformanceCounter
Welcher Teil genau davon war nicht zu verstehen...



Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz