Johanna Burnstein
Freund/in des Forums
Shirley Iuga schrieb:(wär aber besser Thema für einen neuen Thread...)
Ich mach mal, nicht daß man mir noch Threadhijacking vorwirft...
Shirley Iuga schrieb:Johanna Burnstein schrieb:Shirley Iuga schrieb:Soweit ich weiß verursacht ein einfaches llSleep auch weniger Lag als ein llSetTimerEvent + timer-Event + Variablenabfrage im If-loop. War zumindest in LSL2 so.
Abgesehen davon heist es ja auch das der timer event frühestens nach der angegebenen Zeit auslöst. Das kann also auch später sein, wenn sich noch andere Events im Queue davor befinden. Andererseits blockiert llSleep ja, da die Events nicht parallel abgearbeitet werden. (Brauchen sie ja auch nicht bei einer State Machine.)
Also sollte man sich sowas (bei großen Zeiträumen) vorher uberlegen, da dort ein timer Event sinnvoller ist.
Naja, die Frage bzgl. den Ressourcen ist, wie das ganze in Mono gelöst ist. Ob da nun bei llSleep ständig NOP-Operationen ausgeführt werden, oder ob das intern mit einem Timer gemacht wird.
gibts da irgendwo einen offenen Sourcecode dafür?
(wär aber besser Thema für einen neuen Thread...)
Ansonsten können im Script hier ja im pause-State keine weiteren Events aufschlagen.
Mir gings in dem Fall auch nicht so sehr um die Performance, sondern eher darum daß llSetTimerevent + timer() nicht blockieren, wärend llSleep das tut. Wenn auch Events in die Warteschlange gestellt werden, so werden diese aber erst abgearbeitet (die Handler aufgerufen) wenn llSleep fertig ist (und die Eventfunktion, in der llSleep aufgerufen wurde, zurückkehrt).
Hängt natürlich vom erwarteten Verhalten ab. IMO Gerade bei längeren Wartezeiten könnte ein langes llSleep bis auf den Benutzer durchschlagen, der dann davor steht und wie wild drauf rumklickt und sich sagt, "Warum passiert da nix!?" In so einem Fall könnte dann ein Touchevent Handler das abfangen und sage "Du, hör mal. Ich bin gerade beschäftigt, oder warte auf etwas. Komm doch später nochmal wieder."
Wie gesagt, kommt auf den Fall an. Wenn keine Interaktion mit einem Benutzer stattfindet könnte llSleep wieder besser sein, da (vieleicht) performanter, leichter zu verwenden (als die llSetTimerEvent, Timereventhandler, etc Variante), etc...
Apropos, es wird (zumindest bei LSL2) nur ein Event pro "Type" (timer, touch, etc) in die Schlange gestellt. Hatt sich das bei Mono geändert?
Und zum Thema Interne Handhabung: Kann ich nur vermuten, aber ich denke daß das eh in einem Thread des Servers läuft, der dann halt schlafen gelegt wird. Das ist oft eine Kernelfunktion, und daher vom verwendeten System abhängig. Könnte auch 'ne Bibliothek sein, aber die landen ja auch oft wieder bei den entsprechenden Kernellfunktion.
Gruß