MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | VORLAEUFIG, GESCHUETZT |
| 2 | SYNOPSIS |
| 3 | #include <sys/rtlimits.h> |
| 4 | |
| 5 | mixed limited(closure fun); |
| 6 | mixed limited(closure fun, int tag, int value, ...); |
| 7 | mixed limited(closure fun, int *limits [, mixed *args]); |
| 8 | |
| 9 | BESCHREIBUNG |
| 10 | limited() ruft die Funktion <fun> mit den bezeichneten Argumenten |
| 11 | <args> auf und fuehrt sie mit den gegebenen Laufzeitlimiten aus. |
| 12 | |
| 13 | Beim Ende der Funktion <fun> werden die momentan aktiven |
| 14 | Laufzeitlimiten wiederhergestellt. limited() liefert den |
| 15 | Rueckgabewert der Closure <fun> zurueck. |
| 16 | |
| 17 | Die Laufzeitlimiten koennen in zwei Formen angegeben werden: als |
| 18 | Array (wie es von query_limits() geliefert wird) oder als Liste von |
| 19 | Werten mit Tags. Wird limited() ohne Angabe von Limits aufgerufen, |
| 20 | gelten die Laufzeitlimiten als 'unlimitiert'. |
| 21 | |
| 22 | Die Limiteneinstellung kennt drei spezielle Werte aus <rtlimits.h>: |
| 23 | LIMIT_UNLIMITED: es gibt kein Limit |
| 24 | LIMIT_KEEP: das zuletzt gesetzte Limit wird beibehalten |
| 25 | LIMIT_DEFAULT: die 'globalen' Limiten werden verwendet |
| 26 | |
| 27 | Fuer LIMIT_COST, die Spezialwerte haben diese Bedeutung: |
| 28 | LIMIT_UNLIMITED: die Ausfuehrung kosten lediglich einen Tick |
| 29 | LIMIT_KEEP: LIMIT_COST wird auf 0 gesetzt |
| 30 | LIMIT_DEFAULT: LIMIT_COST wird auf -100 gesetzt |
| 31 | |
| 32 | limited() erzeugt eine Schutzverletzung ("limited", current_object, |
| 33 | fun, limits-array). |
| 34 | |
| 35 | BEMERKUNGEN: |
| 36 | Diese Funktion kann bei uns mudlibweit genutzt werden. Allerdings wird |
| 37 | nur die _Reduktion_ von LIMIT_EVAL zugelassen, alle anderen Limits |
| 38 | duerfen _nicht_ veraendert werden. Hierbei ist zu beachten, dass das |
| 39 | Limit fuer LIMIT_EVAL um min. 1000 Ticks unter den noch verfuegbaren |
| 40 | Ticks liegen muss (get_eval_cost()). |
| 41 | Fuer LIMIT_COST sind nur 0 und -100 zugelassen. |
| 42 | |
| 43 | BEISPIELE |
| 44 | limited(#'function) |
| 45 | --> fuehrt die Funktion ohne Limiten aus. |
| 46 | |
| 47 | limited(#'function, ({ 200000 }), "foo") |
| 48 | --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks |
| 49 | aus. Die Funktion wird als 'function("foo")' aufgerufen. |
| 50 | |
| 51 | limited(lambda(0, ({#'function, "foo"})), LIMIT_EVAL, 200000) |
| 52 | --> fuehrt die Funktion mit einem Eval-Kosten Limit von 200000 Ticks |
| 53 | aus. Die Funktion wird als 'function("foo")' aufgerufen. |
| 54 | |
| 55 | AENDERUNGEN |
| 56 | Eingefuehrt in LDMud 3.2.7. |
| 57 | LDMud 3.3.563 fuehrte LIMIT_COST ein. |
| 58 | |
| 59 | SIEHE AUCH |
| 60 | query_limits(E), set_limits(E) |
| 61 | get_eval_cost(E) |
| 62 | |
| 63 | 16.05.2007, Zesstra |
| 64 | |