Autor Beitrag
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 10:17 
err, folgendes Problem:
Ich check einfach nicht wie Threads funktionieren.

Wenn ich bei 'ner Komponente im Hintergrund statt TTimer nen Thread laufen lassen will, wie erzeug ich den, setz nen Interval (??? oder sowas), usw...

In der Hilfe steht nur was von Programm->ThreadObjekt oderso :(

Ist Thread überhaupt sinnvoller als Timer?

Moderiert von user profile iconTino: Titel geändert.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 10:32 
Hi,

das sind 2 verschiedene Dinge ein Timer ist ein Zeitgeber, der in bestimmten Abständen Anweisungen ausführt. Ein Thread ist ein separater Prozess, der im Programm parallel abläuft, und da gibt es auch kein Intervall.

Wenn Du dein genaues Vorhaben postest kann man Dir besser helfen.

MFG

- Ernesto -
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 10:34 
Allgemein gesagt möchte ich bei einer Komponente in einem bestimmten Abstand eine procedure aufrufen.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 10:41 
Dann denk ich mal, dass du mit einem Timer besser beraten wärst. GetTickCount wäre auch eine Möglichkeit. GetTickCount liefert dir in millisekunden, die nach Rechnerstart vergangen sind. Da könntest Du in einer Schleife eine Formel als Bedingung aufsetzen und somit auch dein Ziel erreichen. Evtl. noch Application.ProcessMessages in die Schleife einfügen, damit das Programm nicht einfriert.

MFG

- Ernesto -
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 02.06.03 10:53 
Hallo,
ErnestoChe hat folgendes geschrieben:
Evtl. noch Application.ProcessMessages in die Schleife einfügen, damit das Programm nicht einfriert.

das währe nicht nötig wenn diese Schleife in einem Thread läuft. Ein Timer ist allerdings einfacher.

Tweafis hat folgendes geschrieben:
Ist Thread überhaupt sinnvoller als Timer?

Ein Thread ist dann sinnvoller, wenn die Timer Aktion aufwändig ist (komplizierte rechnungen) und wenig mit den Eigentlichen Programm Komuniziert werden muss (denn wenn du z.B. aus einem Thread ein Label ändern willst, muss erst der Thread mit deinem Programm Syncronisiert werden. Auch sind Treads sinvoll, wenn du erwartest, dass dein Programm in einer Multiprozessor Umgebung eingesetzt werden, denn dan kann der Thread auf einem anderen Prozessor laufen als der Rest des Programmes.

Gruß
Klabautermann
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Mo 02.06.03 11:00 
Klabautermann hat folgendes geschrieben:
das währe nicht nötig wenn diese Schleife in einem Thread läuft. Ein Timer ist allerdings einfacher.


Hab ja auch gar nicht gesagt, dass es das im Thread machen soll :wink:
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 11:03 
Naja, dann nehm ich lieber nen Timer, das hört sich kompliziert an und warum kompliziert wenns auch einfach geht?

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.06.03 11:54 
Wenn du etwas über Threads erfahren willst und wie man sie korrekt ohne die Thread-Klasse der VCL implementiert, dann kuck mal hier: Threads mit Delphi - Ein Crashkurs.

Willst du einen Thread für eine bestimmte Zeit ruhen lassen, bau ein sleep ein.
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:01 
Kann ich den Thread einfach mit sleep schlafen lassen ?? also ohne ProcessMessages und so? und das ändert nichts an der hauptapp?

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.06.03 12:07 
Das ist ja gerade der Gag bei Threads, sie laufen quasi parallel zum Hauptthread mit deinem Fenster. Ich dachte das wäre in meinem Text deutlichgeworden. :roll:
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:26 
Ehrlich gesagt hab ich ihn nur überflogen und die DemoApp angeschaut.
^^ :mrgreen:

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.06.03 12:30 
Kleine Babies kleine Kinder reagieren auch bevorzugt auf Bewegeung. :mrgreen:
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:31 
Luckie hat folgendes geschrieben:
Kleine Babies kleine Kinder reagieren auch bevorzugt auf Bewegeung. :mrgreen:


Lol, was soll das bitte bedeuten???

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.06.03 12:37 
Na ja, bei dem Demo passiert / bewegt sich doch was. Und darauf scheinst du ja reagiert zu haben. :wink:
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 12:43 
Achso :mrgreen: :mrgreen: :mrgreen:

Aber hören wir auf hier rumzuspammen :mrgreen:

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 02.06.03 12:45 
Bei 3050 Posts macht das eine Post mehr oder weniger auch nicht mehr viel aus. :wink: Aber du hast recht, es wird off-topic.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 02.06.03 12:54 
Hi,

2 kleine Infos noch :)

1.) Wenn im Timer etwas aufwendiges geschehen soll, würde ich einfach im Timer den Thread starten.. Also Thread.Execute ;) Das sollte in den meisten fällen ausreichen.

2.) Zu der sache mit Multiprozessoren... Wenn man Threads darauf auslegt das sie auf MP Systemen laufen, hat man viel arbeit... Ich weiß nicht in wiefern die sicherheit in der VCL Version schon drin ist, aber als ich für mein Snake3D einen Thread für die bewegung benutzt habe (in NonVCL), gab es laufend BlueScreens bei mir :)
Denn, das Spiel und der Thread liefen auf getrennten CPUs.. und wenn nun das Spiel auf z.B. die X-Position der Schlange zugreifen wollte, und diese im selben moment von dem Thread geändert wurde.. peng.. :)
BlueScreen, NMI Parity Error.. (unter Win2k!)

Und da man nie sicher sein kann, das ein Programm nicht auchmal auf nem MP System läuft, sollte man immer gut überlegen wie man seine Threads aufbaut, und nach möglichkeit nie einen Wert im Thread verändern auf den gerade zugegriffen werden könnte.

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Tweafis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 02.06.03 13:09 
Bei mir wäre das lediglich in dem Timer eine aktualisierung einer Variable auf die aktuelle Uhrhzeit und eine RePaint...

Ihr habt mich überzeugt, da lohnt sich wirklich kein Thread. Zumal das viel komplizierter ist :mrgreen:

Benutz ich halt weiterhin nen Timer ^^

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 02.06.03 13:28 
Aya hat folgendes geschrieben:
[..] und wenn nun das Spiel auf z.B. die X-Position der Schlange zugreifen wollte, und diese im selben moment von dem Thread geändert wurde.. peng.. :)
BlueScreen, NMI Parity Error.. (unter Win2k!)

Eh klar.. aber das ist nicht nur auf MP Systemen so sondern kann dir auch auf einem ganz normalen Single Processor System passieren! Aber genau aus diesem Grund gibt es ja auch diverse Synchronisations-Mechanismen! :)
CriticalSection, Semaphore, Mutex, ....

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mo 02.06.03 13:38 
Titel: @Motzi
Ganz richtig ... mit einer Einschränkung.
Ich habe nämlich gehört, daß viele Teile von Delphi (7) threat-sicher sind - allerdings mit Einschränkungen. Bestes Beispiel ist threatvar - wenn du das Ding auf einem MP einsetzt kannst du zirka 10.000 mal schneller eine Zugriffsverletzung errreichen als auf SP-Systeme.
Ähm - Frag mich nicht warum - ich habs selber gelesen.

Ach ja - der Autor hatte da so einen geilen Satz:

Delphi stammt aus einer Zeit, als PCs noch einen Prozessor hatten, MS DOS nur einen Prozess unterstützte, 16 Bit statt 32 Bit, Borland noch Borland war, Männer noch Männer und threat-Programmierung kein Thema. *g*

Wie dem auch sei - wenn man sich unter Delphi auf die bordeigenen Synchronisationsmittel verläßt hat man schneller Probleme als man denkt - da ists schon besser selber was zu basteln.

Ach ja - ich rede hier ja auch von Poweranwendungen - für normale kleine Progrämchen (unter 1. Mio Zeilen Code), ists wurscht - und sooo kompliziert ists ja nicht - ich habe meine Multitasking-Angst seit dem Amiga schon lange überwunden *g* - und ich fürchte mich auch nicht mehr vor Lederhosenträgern ;-) Man kann mit beiden ganz unkompliziert umgehen.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.