![]() |
Threads mit TTimer simulieren?
Hi.
Ich habe hier eine feste Anzahl (20) von Dingen, die mein Programm gleichzeitig ausführen sollte (weils nacheinander zu lange dauert). Da für diese Aufgabe Threads viel zu kompliziert sind, habe ich mir gedacht, ich kann das bestimmt mit Timern auch machen. Also 20 Timer auf das Form geklatscht und in einem ButtonClick einfach alle auch Enabled gesetzt. Funktioniert - wird alles gleichzeitig gemacht... Jetzt würde ich das gern zur Laufzeit machen. Dh. zur Laufzeit genug Timer Objekte erstellen und denen jeweils die Aufgabe geben. Im Prinzip soll jedes Timer-Objekt das selbe machen, nur eine Variable ändert sich. Jetzt versuche ich schon die ganze Zeit das folgendermaén zu machen:
Code:
ja - hier ist schluss... Ich würde gerne eine Prozedur einfügen, die ich oben defniniert habe.
tmp:TTimer;
... tmp := TTimer.create(nil); tmp.intervall := 30000; tmp.ontimer := ...
Code:
und dann tmp.ontimer := tudas(1); sagen.
procedure Tudas(parameter:integer);
begin tus.... end; Aber das will nicht. Ich weiß, dass ich die Prozedur irgendwie als TNotifyEvent typen muss, aber das will Delphi auch nicht... Weiß da jemand Rat? Gruß Jörn |
Re: Threads mit TTimer simulieren?
Der timer bracht ein TNotifyEvent, das muss also von einem Objekt sein. Aber dann kannst du statt TTimer auch einfach TThread nehmen ...
Thread-Beispiel:
Delphi-Quellcode:
Und dann irgendwo
TMyThread = class(TThread)
protected procedure Execute; override; end; var MeinThread: TMyThread; implementation procedure TMyThread.Execute; begin Beep; sleep (5000); beep; end;
Delphi-Quellcode:
MeinThread := TMyThread.Create (TRUE);
MeinThread.FreeOnTerminate := TRUE; MeinThread.Resume; |
Re: Threads mit TTimer simulieren?
du könntest eine neue Klasse vom Typ TTimer erzeugen
TOwnTimer = class(TTimer) darin definierst du die Prozedur als Methode fertig ! |
Re: Threads mit TTimer simulieren?
Also wenn ich das so betrachte...
So funktionieren Threads? Das ist ja (relativ) einfach... Da ist mein ganzes rum-ge-Timere viel umständlicher... Ich hab mich nie so richtig an Threads rangetraut :duck: aber ich werde mal weiter schauen. :bounce2: PS: Ich habs mal mit Threads probiert - es klappt. Ich muss jetzt nur noch aufpassen, dass die einzelnen Threads nicht das gleiche machen, sondern jeder seinen Teil. Ich werd mal schauen, ob ich das hinbekomme - eigentlich muss ich nur einen Wert in den Thread reinstecken, bevor er losgelassen wird... Da kann ich doch einfach ne public-Variable in dem Thread definieren und der bevor ich den Thread starte, einen Wert zuweisen, oder? PPS: Daaanke :) |
Re: Threads mit TTimer simulieren?
Zitat:
Also: Threads machen dann Sinn, wenn die Aufgaben, die zu erledigen sind immer wieder Wartezeiten aufweisen (weil z.B. eine Datei übers Internet downgeloaded wird oder auf Daten der seriellen Schnittstelle gewartet wird) Wenn du 20 Apfelmännchenbilder rechnen willst, dann wird es mit Threads länger dauern als wenn du alles nacheinander durchführst. Wenn du nun versuchst, die Threads mit Timer nachzubilden, wird die ganze Sache noch langsamer als mit Threads werden. Effektiv hast du nur einen Programmfaden; wenn ein Timer nicht zurückkommt, weil in OnTimer noch gearbeitet wird, laufen die anderen Timer nicht weiter. Haben deine 20 Dinge Wartezeiten, dann nimm Threads; sind keine Wartezeiten zu erwarten dann arbeite alles nacheinander ab! |
Re: Threads mit TTimer simulieren?
[quote="shmia"]
Zitat:
Danke! Das hat mich jetzt in meinem -Ich mach das jetzt mit Threads- Gedanken bestärkt... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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