Autor Beitrag
stiftmaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Do 15.05.03 20:03 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: 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

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
stiftmaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: 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]
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 16.05.03 14:37 

  1. 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.
  2. Warum stellst du die Antwort nicht hier ins Forum?

:roll:
stiftmaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Fr 16.05.03 14:48 
klar kann ich das....
hier ist der Code:
ausblenden volle Höhe 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;