Server laggt durch Timer (Fehler im Timer, evtl mit MA_PLAYERS)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,


    ich habe seitdem ich bei einigen Timern was gemacht habe, starke laggs auf meinem Server, sobald einige User (reicht schon bei 5 Stück) auf dem Server sind:


    Ich habe einige Timer, aber ich vermute den Fehler bei einem von den hier:


    Timer 1 (Sekunden Timer - Uhrzeit usw.)



    Other Timer:


    forward sekunde();public sekunde(){ new times[128]; new hour, minute, second; gettime(hour, minute, second); format(times,sizeof(times),"%02d:%02d:%02d",hour, minute, second); TextDrawSetString(TDUhrzeit, times);
    paydayzeit ++; if(paydayzeit == 60) { for(new i = 0; MAX_PLAYERS > i; i++) { for(new y = 0; MAX_HAUS >= y; y++) { new hausid[128]; format(hausid,sizeof(hausid),"/Haus/Haus%i",haus[y][hid]); new maxmieter = dini_Int(hauscfg,"Max_Mieter"); for(new x = 0; maxmieter > x; x++) { new mietername[128]; format(mietername,sizeof(mietername),"Mieter%i",x); if(strcmp(dini_Get(hausid,mietername),SpielerName(i),false) == 0) { if(pInfo[i][pGeld] >= haus[y][hmietpreis]) { GiveMoney(i,-haus[y][hmietpreis]); haus[y][hkasse] = haus[y][hkasse] + haus[y][hmietpreis]; new string[128]; SendClientMessage(i,COLOR_YELLOW,"__-- [MIETEN-ZAHLUNG] --__"); format(string,sizeof(string),"Du hast deine Miete in Höhe von %i bezahlt.",haus[y][hmietpreis]); SendClientMessage(i,COLOR_YELLOW,string); } else { dini_Set(hausid,mietername,"Niemand"); new string[128]; SendClientMessage(i,COLOR_YELLOW,"__-- [MIETEN-ZAHLUNG] --__"); format(string,sizeof(string),"Du konntest deine Miete in Höhe von %i$ nicht bezahlen und wurdest rausgeschmissen!",haus[y][hmietpreis]); SendClientMessage(i,COLOR_RED,string); } } } } } } return 1;}


    Pastbin Link: KLICK



    Tipp: Alle Timer aktualiseren sich bei 1 Sekunde!!!

    Einmal editiert, zuletzt von Skyscraper ()

  • Meistens passiert das, wenn der Intervall eines Timers zu klein ist
    bsp:
    Funktion brauch 3 Sekunden um alles zu verarbeiten
    Der Timer will aber jede Sekunde alles machen
    Sprich du gibst ihn die Dreifache arbeit die er nach ner Zeit nicht mehr bewältigen kann


    Meine lösung dazu ist, den Timer einmal zu starten ohne das er sich wiederholt und am ende der Funktion den Timer neu starten lassen (sodass er auch diesmal wieder nur einmal startet)
    Dann solltest du eine verbesserung merken

    All in all it's just another brick in the wall

  • Hmm.. das habe ich mir auch gedacht :)


    Ist das ganze Ressourcenfressend, oder hält sich das im Rahmen?


    Ein weiteres Problem, was ich sehen würde ist, dass der Timer (der ja eigentlich jede Sekunde diverse Sachen abfragen soll etc.) dann ja nur (je nach dem wie lange er braucht) z.B. alle 3 Sekunden diese Sachen abfragen kann.

  • Wenn ich das ja richtig sehe hast du 4 functionen die einmal pro sekunde laufen sollen
    Man kann da noch einiges Optimieren, jedoch würd ich da alles in einer Funktion reinpacken


    (mach mal den Quelltext richtig damit man besser erkennen kann was du da gemacht hast)

    All in all it's just another brick in the wall