Pause in eine Schleife einbauen?

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
  • Guten Abend,


    Ich habe gerade mal eine frage...
    unzwar: Wie baue ich in eine for schleife eine Pause ein?
    Unzwar so das z.B. Account 1 gespeichert wird und nach 2 sekunden Account 2?


    Ich habe es schon mit sleep(2000); //2000 Millisekunden = 2 Sekunden ausprobiert, jedoch ohne erfolg...
    Im SA-MP Wiki steht dazu folgendes:

    Zitat

    This only works in main(), not callbacks however as it's run in the PAWN thread.

    Deswegen wollte ich nun fragen ob es vieleicht noch eine andere möglichkeit gibt...


    Mit freundlichen Grüßen,
    Zunno


    /edit: PAWN BB-Code gefixxt.

  • Mach eine globale Variable für die SpielerID, die gespeichert werden soll.


    Dann rufst du alle 2000ms per Timer eine Funktion auf, die die Daten des Spielers eben dieser Variable speichert und anschließend die Variable um 1 erhöht. Nicht vergessen, wenn du bei 500 angekommen bist die Variable wieder auf 0 zu setzen. ;)

  • Ich habe befürchtet das es nur den Ausweg "Timer" gibt....
    wenn jemand anders noch eine weitere möglichkeit hat, kann er diese gerne posten.
    Ich sag schonmal danke, und bastel mir den Timer zusammen.



    Mit freundlichen Grüßen,
    Zunno

  • Andere Möglichkeiten wie die "pause"-Funktion kann es nicht geben, da PAWN Single-threaded ist und immer nur eine Sache gleichzeitig machen kann. Die einzige andere Möglichkeit wäre halt, in Callbacks wie OnPlayerConnect oder dergleichen die Speicherfunktion immer aufzurufen, aber das wäre sehr unregelmäßig und unsicher.


    Das mit dem Timer passt schon, mach das Intervall nicht allzu knapp, mach die For-Schleife nur so lang wie du Spielerslots hast, überprüf vor dem Ausführen des Codes ob der Spieler wirklich online ist und nimm nicht unbedingt DINI, dann wird das schon. ;)

  • Ich benutze MySQL, nur wenn ich alle Accounts gleichzeitig speichern lasse, ist mein MySQL Server etwas überlastet und der Server laggt^^
    Deswegen möchte ich halt das die Accounts nach einander gespeichert werden.


    Ich habe nun soweit alles fertig hab aber noch eine Frage:
    Ist es normal das wenn man einen Timer startet und z.B. die ID 2 hat, diesen Killt und ihn neu startet dann ID 3 bekommt? O.o


    Zunno


    /EDIT: Rechtschreibfehler behoben


    Einmal editiert, zuletzt von [GSF]Zunno ()

  • Um nochmal was wegen dem sleep zu sagen...
    es gibt zwar keine native funktion dafür, aber rein theoretisch kann man das per gettickcount und ner while schleife machen...
    stock sSleep(sZeit)//Zeit in Millisekunden
    {
    new sTick = GetTickCount();
    while(GetTickCount() - sTick < sZeit) {}
    return 1;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.