| SYNOPSIS |
| void call_out(string fun, int delay, mixed arg, ...) |
| void call_out(closure cl, int delay, mixed arg, ...) |
| |
| BESCHREIBUNG |
| Ruft zeitverzoegert die Funktion <fun> im aktuellen Objekt oder |
| die Closure <cl> auf. Der Aufruf erfolgt in <delay> Sekunden. |
| Die Funktion / Closure wird mit den <arg> Argumenten aufgerufen. |
| Die minimale Verzoegerung ist 0 (negative <delay> werden implizit als |
| 0 behandelt). Allerdings ist die reale Verzoegerung etwas zwischen |
| <delay> und __ALARM_TIME__. |
| |
| call_out() merkt sich den aktuellen User und ruft die Funktion |
| entsprechend auf. call_out() kann nur Funktionen aufrufen, die |
| oeffentlich zugaenglich sind, das heisst "public" und "static" |
| deklarierte Funtionen. "private" und "protected" deklarierte |
| Funktionen koennen nicht aufgerufen werden. |
| |
| Die Ausfuehrung von call_out()s erfordert einen einfachen (nicht |
| zu aufwendigen) Schutz gegen Rabbits: die Evalkosten aller |
| gleichzeitig anstehenden call_out()s werden auf einer pro-UID-Basis |
| summiert. Uebersteigt die Summe ein vorgegebenes Maximum, wird |
| ein Fehler 'too long evaluation' erzeugt, und es werden alle |
| call_out()s des betreffenden Benutzers, die zur gleichen Zeit |
| faellig werden, entfernt. |
| |
| Wenn zwei call_out()s zum gleichen Zeitpunkt ausgefuehrt werden |
| sollen, wird der zuerst gestartete zuerst ausgefuehrt. |
| |
| BEISPIELE |
| call_out("RefreshMe", 10); |
| |
| Dies ruft die Funktion RefreshMe() nach Ablauf von 10 Sekunden ohne |
| irgendwelche Argumente auf. Die Funktion RefresMe() kann dann |
| wiederum selbst call_out()s starten, auch auf sich selbst, was |
| eine Schleife erzeugt (keine Rekursion). Mit einer solchen Schleife |
| koennen Anweisungen in einem Objekt in regelmaessigen Zeitintervallen |
| ausgefuehrt werden. Es ist allerdings zu beachten, dass call_out()s |
| in einer linearen Liste gespeichert werden, und deshalb ziemlich |
| rechenaufwendig fuer den Treiber sind. |
| |
| Und JA: selbst-replizierende call_out()s, bei denen jeder call_out() |
| selbst zwei oder mehr call_out()s in einem Loop erzeugt (sogenannte |
| Rabbits) verlangsamen das Mud ungemein und koennen es sogar zum |
| Crash bringen. Kein Grund, es selbst auszuprobieren. |
| |
| SIEHE AUCH |
| remove_call_out(E), call_out_info(E), find_call_out(E), |
| this_player(E), reset(A), heart_beat(A) |