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.
<delay> kann groesser oder gleich 0 sein, und wird intern auf das
naechste Vielfache von __ALARM_TIME__ aufgerundet.
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.
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
einen Loop erzeug (keine Rekurison). Mit einem solchen Loop 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 (so genannte
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)