OP schrieb:
> Wie kann ich sowas in eine Funktion verpacken, die ich beliebig oft
> parrallel von verschiedenen Stellen aus im Code aufrufen kann?
garnicht. Mach es genau anders herum.
1. schreibe dir eine Systemuhr, die die Uhrzeit in ms zählt.
1a. ordne dort auch ne stupide Warterei ein, für den Fall, daß irgendwas
ein Warten benötigt, bevor die Uhr komplett aufgesetzt ist.
2. lasse diese Systemuhr eine Liste führen, wo Ereignisse eingetragen
werden können, die zu einer bestimmten Uhrzeit in Erscheinung treten
sollen. Dazu gehört: Liste bei jedem (oder jedem 10. oder so) Timertick
durchsehen und Ereignis ggf. werfen, Liste zu Mitternacht zusammen mit
der Uhrzeit um 24h zurücksetzen, Methode zum Listeneintrag, Methode zum
löschen eines Ereignisses aus der Liste.
3. schreibe dir eine kleine Ereignisverwaltung. Also Definition von
Ereignissen, Ereignis-Warteschlange, Methoden zum einwerfen von
Ereignissen in die Warteschlange und zum Auslesen der Warreschlange.
4. frage in deiner Grundschleife die Ereigniswarteschlange ab und
reagiere, wenn du dort ein Ereignis findest. Etwa so:
1 | if(EventAvailable())
|
2 | { switch (GetEvent())
|
3 | case evMachsLichtAus: MachsLichtAus();
|
4 | AddDelayedEvent(evMachTürZu,5000); // nach 5 sek
|
5 | break;
|
6 | case evTürklingel: SiehNach(Haustür);
|
7 | };
|
8 | }
|
Das war's.
Ich hänge dir mal was dran, was du seit Jahren auch schon in der
Lernbetty hättest finden können.
W.S.