Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - 2 Timer gleichzeitig laufen lassen
stiftmaster - Do 15.05.03 20:03
Titel: 2 Timer gleichzeitig laufen lassen
Hallo Leute,
habe mal wieder ein Problem.
Ich brauche unbedingt 2 Timer in meinem Programm:
1. für ein Backup, das alle 10 Minuten durchgeführt werden soll
2. für das Einlesen eines Chip-Karten Geräts
Ich habe mitlerweile schon am eigenen Leibe ;-) erfahren, dass immer nur ein Timer aktiv sein kann.
Gibt es eine Möglichkeit, dies zu umgehen?
Danke für eure Hilfe
Stefan
GSE - Do 15.05.03 20:22
Du könntest in den zweit genannten Timer das BackUp machen mit hineinbringen. Angenommen der Timer hat ein Interval von 1000,
du müsstest da einfach eine Variable in die Timerprozedure einbauen, die du bei jedem Durchlauf um eins erhöhst. Wenn die Variable gleich 600 ist
(600*1000=600000 msec = 600 sec = 10 Min): BackUp machen!
Wäre jedenfalls mein Vorschlag.
mfg
GSE
stiftmaster - Do 15.05.03 20:50
aus gewissen Gründen ist es erforderlich, dass zwei Timer benötigt werden (da auch bald ein zweiter Kartenleser installiert werden soll)
Das Problem liegt daran, dass die Kartenlesen eine gewisse Zeit brauchen, bis sie die Karte eingelesen haben. Mithilfe der zwei Timer soll es möglich sein, dass beide Timer gleichzeitig abgerufen werden. Werden bei einem Timer die Kartengeräte hintereinander abgerufen, dauert das einlesen fast 1 Sekunde und das ist, das hört sich jetzt bestimmt dumm an, einfach zu lange, da es in der Hälfte der Zeit gerade noch akzeptabel ist.
Dankend
Stefan
Delete - Do 15.05.03 21:58
Ich hatte bisher mit zwei Timern keien Probleme.
Aber denk mal über Threads nach, die du für eine bestimmte Zeit mit sleep() schlafen schickst. Timer können das System ganz schön belasten.
stiftmaster - Fr 16.05.03 13:27
Ich habe das mit den 2 Timer jetzt geschafft.
Dafür habe ich zwei API-Timer genommen.
Bei Fragen einfach mailen an:
delphi@runkel-stefan.de
MfG
Stefan[/delphi]
Delete - Fr 16.05.03 14:37
- Was verstehst du unter API-Timer? Wenn es das is, was ich denke das es ist, dann ist es nichts anderers als eine TTimer-Komponenten.
- Warum stellst du die Antwort nicht hier ins Forum?
:roll:
stiftmaster - Fr 16.05.03 14:48
klar kann ich das....
hier ist der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| { The timeSetEvent function starts a specified timer event. The multimedia timer runs in its own thread. After the event is activated, it calls the specified callback function or sets or pulses the spe cified event object.
MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent );
uDelay: Event delay, in milliseconds
uResolution: Resolution of the timer event, in milliseconds. A resolution of 0 indicates periodic events should occur with the greatest possible accuracy. You should use the use the maximum value appropriate to reduce system overhead.
fuEvent: TIME_ONESHOT Event occurs once, after uDelay milliseconds. TIME_PERIODIC Event occurs every uDelay milliseconds. }
uses MMSystem;
var mmResult: Integer;
// callback function procedure TimeCallBack(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal; begin // Do something here. This procedure will be executed each 10 ms Form1.Label1.Caption := Form1.Label1.Caption + '%'; end;
// Set a new timer with a delay of 10 ms procedure TForm1.Button1Click(Sender: TObject); begin mmResult := TimeSetEvent(10, 0, @TimeCallBack, 0, TIME_PERIODIC); end;
// Cancel the timer event. procedure TForm1.FormDestroy(Sender: TObject); begin TimeKillEvent(mmResult); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!