Der TaskManager
Hi.
Immer wieder sehe ich Leute schreiben, dass es nicht gut sei, viele Timer zu haben und dass diese resourcenfressend seien.
Das stimmt teilweise. Man kann 100 Timer haben, welche jede Sekunde eine Funktion ausführen. Das ist jedoch erst schlimm, wenn die einzelnen Funktionen selbst sehr viel ausführen müssen.
Nehmen wir an, wir haben einige notwendige Timer, welche alle zusammen jede Sekunde einmal ausgeführt werden müssen. Oder wir haben eine Timer, der sehr viel auf einmal ausführen muss.
Der Server beginnt nun womöglich zu laggen. Wo liegt denn das Problem? Das Problem ist offensichtlich, dass alle Timer aufeinmal ausgeführt werden sollen.
Das ist etwa das gleiche wie wenn 10 Leute gleichzeitig durch eine Tür wollen. Das geht wohl kaum. Wenn sich diese Leute jedoch in eine Reihe stellen, kommen alle problemlos durch.
Der TaskManager löst dieses Problem.
Der TaskManager nimmt eine beliebige Anzahl Timer und wird diese dann regelmässig ausführen. Jedoch nicht alle aufeinmal, sondern er wird sie alle schön über das Zeitinterval verteilen. Somit kann der Server selbst immer wieder etwas ausführen und so den Lagg vermindern.
Die Anwendung ist ganz einfach:
NewTask<1000>("UpdateAllPlayers", "NVAntiCheat");
NewTask<15000>("NeedsUpdate", "FuelUpdate", "ClockUpdate");
Man ruft die Funktion NewTask auf, übergibt ein paar Funktionsnamen und gibt noch das Zeitinterval in den eckigen Klammern an.
Im obigen Beispiel wird dann nach 500 MS UpdateAllPlayers aufgerufen, nach weiteren 500 MS NVAntiCheat, nach weiteren 500 MS erneut UpdateAllPlayers.
Würde man einfach zweimal SetTimer aufrufen, würden alle 1000 MS UpdateAllPlayers und NVAntiCheat gleichzeitig ausgeführt werden...
Also:
500 ms -> UpdateAllPlayers
1000 ms -> NVAntiCheat
1500 ms -> UpdateAllPlayers
2000 ms -> NVAntiCheat
2500 ms -> UpdateAllPlayers
etc...
Anstatt
ACHTUNG
TaskManager unterstützt nur Timer, welche KEINE Argumente nehmen und Timer, welche regelmässig ausgeführt werden.
Download:
TaskManager.inc
ptr.inc (notwendig)