Ereignise alle x Sekunden durchführen

Gast #1827172
Lesenswert?

Hi,

ich habe folgendes Problem. Ich möchte bestimmte Ereignisse alle x 
Sekunden ausführen.

Zum Beispiel

Ereignis A alle x ms
Ereignis B alle y s
Ereignis C ...

Das löse ich bisher so, dass ich einen Timer habe, der in einer 32 Bit 
Variable Millisekunden hoch zählt. Anschliesend vergleiche ich in einer 
Endlosschleife:
1
if( ms-EreignisA >= 1000) {
2
   EreignisA=ms;
3
   ...
4
}

Gibt es dafür noch elegantere Lösungen?
#1827214
Lesenswert?

Wiederholer schrieb:

>
1
> if( ms-EreignisA >= 1000) {
2
>    EreignisA=ms;
3
>    ...
4
> }
5
>
>
> Gibt es dafür noch elegantere Lösungen?

Was findest du daran unelegant?

eine Alternative wäre vielleicht noch
1
   performChecks = 0;
2
   cli();
3
   if( ms != ms_alt )    // ist eine Millisekunde um?
4
   {
5
     ms_alt = ms;
6
     performChecks = 1;
7
   }
8
   sei();
9

10
   if( performChecks )  // Zeitauswertungen nur jede volle Millisekunde
11
   {
12
     EreignisA--;
13
     if( EreignisA == 0 )           // ist die Zeit für A rum?
14
     {
15
       EreignisA = TIME_FOR_A;
16
       ....
17
     }
18

19

20
     EreignisB--;
21
     if( EreignisB == 0 )           // ist die Zeit für B rum?
22
     {
23
       EreignisB = TIME_FOR_B;
24
       ....
25
     }
26

27
     .....
28
   }

Dann werden deine Zeit-Ereignisse auch nur dann bearbeitet, wenn eine 
Millisekunde um ist und nicht ständig. Und du hast auch noch die 
Möglichkeit die Zeit für ein Ereignis auch einmal abzukürzen bzw. zu 
verlängern, indem du EreignisA direkt manipulierst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren