AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread aus einer Komponente heraus erzeugen?

Ein Thema von Mattze · begonnen am 10. Sep 2006 · letzter Beitrag vom 11. Sep 2006
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 17:38
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
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 17:42
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

  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 17:42
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
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 19:47
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
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 19:52
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
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 20:03
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.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#7

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 10. Sep 2006, 20:14
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 ) oder MSDN-Library durchsuchenQueryPerformanceCounter

  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 11. Sep 2006, 17:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#9

Re: Thread aus einer Komponente heraus erzeugen?

  Alt 11. Sep 2006, 17:47
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
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...

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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