blob: c967812707c13dcbe2a2a690a664151355982ef8 [file] [log] [blame]
VORLAEUFIG, GESCHUETZT
SYNOPSIS
#include <sys/rtlimits.h>
mixed limited(closure fun);
mixed limited(closure fun, int tag, int value, ...);
mixed limited(closure fun, int *limits [, mixed *args]);
BESCHREIBUNG
limited() ruft die Funktion <fun> mit den bezeichneten Argumenten
<args> auf und fuehrt sie mit den gegebenen Laufzeitlimiten aus.
Beim Ende der Funktion <fun> werden die momentan aktiven
Laufzeitlimiten wiederhergestellt. limited() liefert den
Rueckgabewert der Closure <fun> zurueck.
Die Laufzeitlimiten koennen in zwei Formen angegeben werden: als
Array (wie es von query_limits() geliefert wird) oder als Liste von
Werten mit Tags. Wird limited() ohne Angabe von Limits aufgerufen,
gelten die Laufzeitlimiten als 'unlimitiert'.
Die Limiteneinstellung kennt drei spezielle Werte aus <rtlimits.h>:
LIMIT_UNLIMITED: es gibt kein Limit
LIMIT_KEEP: das zuletzt gesetzte Limit wird beibehalten
LIMIT_DEFAULT: die 'globalen' Limiten werden verwendet
Fuer LIMIT_COST, die Spezialwerte haben diese Bedeutung:
LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick
LIMIT_KEEP: LIMIT_COST wird auf 0 gesetzt
LIMIT_DEFAULT: LIMIT_COST wird auf -100 gesetzt
limited() erzeugt eine Schutzverletzung ("limited", current_object,
fun, limits-array).
BEMERKUNGEN:
Diese Funktion kann bei uns mudlibweit genutzt werden. Allerdings wird
nur die _Reduktion_ von LIMIT_EVAL zugelassen, alle anderen Limits
duerfen _nicht_ veraendert werden. Hierbei ist zu beachten, dass das
Limit fuer LIMIT_EVAL um min. 1000 Ticks unter den noch verfuegbaren
Ticks liegen muss (get_eval_cost()).
Fuer LIMIT_COST sind nur 0 und -100 zugelassen.
BEISPIELE
limited(#'function)
--> fuehrt die Funktion ohne Limiten aus.
limited(#'function, ({ 200000 }), "foo")
--> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
aus. Die Funktion wird als 'function("foo")' aufgerufen.
limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000)
--> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks
aus. Die Funktion wird als 'function("foo")' aufgerufen.
AENDERUNGEN
Eingefuehrt in LDMud 3.2.7.
LDMud 3.3.563 fuehrte LIMIT_COST ein.
SIEHE AUCH
query_limits(E), set_limits(E)
get_eval_cost(E)
16.05.2007, Zesstra