Absender: Timo Sandmann
Datum: Do, 12.07.2007 16:17:43
In-reply-to:
<46962BF0.9040900@xxxxxxxx>
References:
<792F4909-2A8F-479F-BF59-B665BAD6FD86@xxxxxxxxxxxxxxx> <46962BF0.9040900@xxxxxxxx>
Hi, Am 12.07.2007 um 15:26 schrieb Benjamin Benz:
Genau wie bei jedem anderen Verhalten. Entweder ruft man es mit OVERRIDE auf, dann wir der Alte Wunsch gelöscht oder man ruft es mit NO_OVERRIDEauf, dann bekommt man eine Fehlermeldung, wenn es belegt ist.
na ja, der erste Aufrufer schaut aber letztlich immer in die Röhre:Verwendet man OVERRIDE, kann er zwar abfragen, ob er unterbrochen wurde, wenn ja weiß er aber nicht, wie viel Zeit nun schon vergangen ist. Verwendet man NOOVERRIDE, wird beim Aufruf von bot_delay() erst die interne Datenstruktur (Wartezeit) überschrieben und dann abgebrochen, so dass der zweite Aufrufer einen Fehler bekommt, die Wartezeit des Ersten aber nicht mehr stimmt. (Vermutlich gibt's das Problem auch bei anderen Verhalten, aber da nach geäußerten Fahrwünschen keine weiteren mehr gestartet werden, ist das eher unproblematisch.)
IMHO müsste ein einmal gestartetes delay auch garantiert korrekt ausgeführt und jeder nachfolgende Aufrufer abgeblockt werden. Der kann dann so lange delay-Aufrufe "probieren", bis das delay-Verhalten frei ist. Dann hätte man zwar so eine Art Spinlock, aber es würde zumindest die Semantik vom delay-Verhalten stimmen.
Gruß Timo