Maximale Ausführungszeit
Alle Warcraft-Scripts haben eine Beschränkung: die maximale Ausführungszeit. Dies bedeutet, dass ein Trigger automatisch abgebrochen wird, wenn er zu lange ununterbrochen läuft. Dies kann bei komplizierten, langen Berechnungen zu Problemen führen, da ohne einen Fehler oder eine Warnung ab einem gewissen Punkt einfach keine Aktionen mehr ausgeführt werden. Jeder Trigger ist dabei unabhängig von den anderen.
Das Tool Grimoire gibt eine Meldung aus, wenn eine Funktion die maximale Ausführungszeit erreicht. Es eignet sich also dafür, den Fehler zu finden.
Inhaltsverzeichnis |
Mögliche Gründe
Warum die Begrenzung existiert ist nicht genau bekannt. Mögliche Gründe sind:
- Es sollen Endlosschleifen vermieden werden
- Es soll sichergestellt werden, dass das Spiel synchronisiert bleibt
Alternativen
Man kann die maximale Ausführungszeit nur umgehen, indem man eine Berechnung in mehrere Teile aufteilt. Es gibt 3 Funktionen, die benutzt werden können um dies innerhalb eines Triggers zu tun:
Wait
call TriggerSleepAction(0.0)
Man kann davon ausgehen, dass diese Funktion in etwa das gleiche macht, wie die beiden unteren Funktionen zusammen und noch eine Pause hinzufügt. Diese Funktion braucht relativ lange, bevor die nächste Aktion ausgeführt wird (ca. 0,2 Sekunden).
TriggerSyncStart
call TriggerSyncStart()
Diese Funktion braucht relativ lange, bevor die nächste Aktion ausgeführt wird (ca. 0,2 Sekunden).
TriggerSyncReady
call TriggerSyncReady()
Diese Funktion ist die schnellste der 3 Funktionen und ist deshalb am besten geeignet.
Aufteilung in mehrere Trigger
Da sich die maximale Ausführungszeit nur auf Trigger beschränkt, kann man sie quasi zurücksetzen, indem man einen neuen Trigger aufruft. Das Problem dabei ist, dass keine Parameter direkt übergeben werden können. Auch periodische Timer mit der Periode 0.0 Sekunden funktionieren, haben aber den gleichen Nachteil.
Mit vJass hat man das Problem nicht mehr, dort kann man .evaluate oder .execute benutzen um eine Funktion in einem neuen Trigger aufzurufen.
siehe auch
- The Script Execution Limit auf wc3jass.com (englisch)

russische Team, stehen wir nun im Halbfinale vor einem weiteren Giganten der e-Sports-Szene:
Finnland! Die Skandinavier hatten es im Gegensatz zu unserem