AGB  ·  Datenschutz  ·  Impressum  







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

Threads mit TTimer simulieren?

Ein Thema von tata1 · begonnen am 31. Jan 2005 · letzter Beitrag vom 31. Jan 2005
Antwort Antwort
tata1

Registriert seit: 19. Aug 2003
10 Beiträge
 
#1

Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:12
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:
tmp:TTimer;
...
tmp := TTimer.create(nil);
tmp.intervall := 30000;
tmp.ontimer := ...
ja - hier ist schluss... Ich würde gerne eine Prozedur einfügen, die ich oben defniniert habe.
Code:
procedure Tudas(parameter:integer);
begin
 tus....
end;
und dann tmp.ontimer := tudas(1); sagen.

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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:17
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:
TMyThread = class(TThread)
  protected
    procedure Execute; override;
end;

var
 MeinThread: TMyThread;

implementation

procedure TMyThread.Execute;
begin
Beep;
sleep (5000);
beep;
end;
Und dann irgendwo
Delphi-Quellcode:
MeinThread := TMyThread.Create (TRUE);
MeinThread.FreeOnTerminate := TRUE;
MeinThread.Resume;
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#3

Re: Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:18
du könntest eine neue Klasse vom Typ TTimer erzeugen

TOwnTimer = class(TTimer)

darin definierst du die Prozedur als Methode

fertig !
  Mit Zitat antworten Zitat
tata1

Registriert seit: 19. Aug 2003
10 Beiträge
 
#4

Re: Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:42
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 aber ich werde mal weiter schauen.


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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:43
Zitat von tata1:
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.
Ich finde das keine gute Idee!!!
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!
Andreas
  Mit Zitat antworten Zitat
tata1

Registriert seit: 19. Aug 2003
10 Beiträge
 
#6

Re: Threads mit TTimer simulieren?

  Alt 31. Jan 2005, 16:55
[quote="shmia"]
Zitat von tata1:
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)
Sind böse Wartezeiten dabei

Danke! Das hat mich jetzt in meinem -Ich mach das jetzt mit Threads- Gedanken bestärkt...
  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 10:12 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