Problem mit Threaded Querys

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
  • Hallo zusammen,


    ich habe mir gestern gedacht, dass ich die Datenabfrage beim Account laden und auch das Speichern in Threaded Querys umschreibe, da ich dachte, dass dadurch die Performance des Servers gesteigert wird.
    Das Problem bei der Sache ist, dass ich heute festgestellt habe, dass in die Threads falsche playerid's übergeben werden. Sprich der Account wurde überschrieben.


    Kann man das Problem irgendwie lösen, oder ist dies überhaupt bekannt?


    Mfg,
    UncleSub


    P.S.: Ich benutze das neueste MySQL Plugin von StrickenKid.

  • Kannst du mal ein beispiel code posten zu einem threaded query und was verwendest du also, welches callback OnMysqlQuery oder OnMysqlQueryArray und zum Thema speichern da benötigst du nicht wirklich threaded querys.

  • Ich benutze OnMySqlQuery, da ich ja nur die playerid übergeben muss.


    Also ich habe dann einfach



    //SpielerLaden stock
    new query[128];
    format(query, 128, "SELECT * FROM Accounts WHERE Name='%s'", SpielerName(playerid));
    mysql_query(query, MYSQL_LOADPLAYER, playerid);


    //OnMysqlQuery
    switch(resultid)
    {

    case MYSQL_LOADPLAYER:
    {
    new data[800], field[44][100];
    mysql_store_result();
    if(mysql_num_rows())
    {
    mysql_fetch_row(data);
    splitfu(data, field, '|');
    format(Spieler[spareid][pPasswort], 40, field[1]);
    Spieler[spareid][pLevel] = strval(field[2]);
    SetPlayerScore(spareid, Spieler[spareid][pLevel]);
    Spieler[spareid][pKills] = strval(field[3]);
    Spieler[spareid][pDeaths] = strval(field[4]);
    mysql_free_result();
    ......
    }
    }
    }


    Zum speichern: Hast du eigentlich recht.

  • Also so sehe ich generel in der Verwendung keinen Fehler normal sollte die richtige id übergeben werden.
    Wenn du jedoch schreibst das dieses Problem beim speichern auftritt würde ich das weg lassen es ist sowieso unsinnig.


    Ich kann dir jedoch noch paar kleine Tipps geben.


    beim auslesen von einem Datensatz benutzte noch LIMIT 1 das sorgt das erbeim ersten fund aufhört auszulesen und zum splitten verwende sscanf.
    Warum ist schneller und weniger umständlich


    sscanf(data,"p<|>s[40]ddd",Spieler[spareid][pPasswort],Spieler[spareid][pLevel],Spieler[spareid][pKills],Spieler[spareid][pDeaths]);
    SetPlayerScore(spareid, Spieler[spareid][pLevel]);


    man kann auch dne specifer e dazu holen nur buggt dies ab und zu.

  • Okay gut. Dann lass ich das Threaded Speichern weg, evtl funktioniert es dann.


    Mit sscanf habe ich tatsächlich auch neuere Systeme laden lassen, doch das System ist schon was älter, deswegen hab ich das noch so und ich war auch zu faul um es zu ändern.


    Danke für die Tipps und die Hilfe!


    Ich editier hier glecih drunter, ob es ohne Threaded SpielerSpeichern funktioniert.


    //Edit:
    Scheint bis jetzt zu funktionieren. Danke für die Hilfe! Trotzdem finde ich es komisch, dass beim SpielerSpeichern falsche ID's übermittelt werden. Naja was solls.

    Einmal editiert, zuletzt von UncleSub () aus folgendem Grund: Lösungsansatz funktioniert