• So Leute habe nun einen Server laufen wo ich auch raufkomme ^^

    Mein Script läuft auch mit dem Verbindung auf die MariaDB etc. bearbeiten hinzufügen geht alles.

    In meiner GUI werden auch Listen angezeigt aus der DB, diese werden im Zeitinervall über $iTimer = _Timer_GetIdleTime() ausgelöst.

    Das ist bei dem Programm 1 auch kein Problem da die Anwender nur selten am PC sind, aber Programm 2 wird ständig benutzt das da entweder nur eine sehr kurze $iTimer = _Timer_GetIdleTime() funktionieren würde.

    Aber dann hat man das Problem das die GUI sehr oft aktualisiert und dann flackert, zu mindestens die sichtbaren Bereiche

    1. Da immer wieder die DB abgefragt wird und die komplette Liste neu ins array kommt und somit in die Viewlist neureingeladen wird, kann man das irgendwie umgehen sodass nur das element abgeändert wird das auch in der DB geändert wurde?

    2. Kann man die _Timer_GetIdleTime() evtl. auch nur auf das einzelne Programm/script beziehen und nicht auf den kompletten Rechner? Oder kann man irgendwie einen hash von der DB auf der ich eingeloggt bin erzeugen und wenn dieser sich ändert dann erst wieder eine Aktualisierung stattfindet?


    das mit dem hash wäre mir am liebsten, bei meiner ftp Lösung hatte das damals wunderbar funktioniert, jedoch habe ich ja keine einzelne Datei wo ich den hash erstellen könnte.

    :Face:

    EDIT : jetzt wo ich so darüber nachdenke, könnte ich ja einfach in der DB eine extra Tabelle machen mit einem hash der sich jedes Mal ändert sobald eine Änderung oder neu Eingabe in die DB hinzukommt.

    oder habt Ihr dennoch einen besseren vorschlag?

    Einmal editiert, zuletzt von MojoeB (21. Juni 2022 um 10:04) aus folgendem Grund: Gedankenblitz

  • Hi, ich würde davon abraten, über alle Daten einen Hash zu erzeugen. Das ist sehr Rechenintensiv und unnötig.

    Deshalb meine Vorschläge:

    Zu 1.:

    MariaDB speichert, wann eine Tabelle zuletzt geändert wurde, also kannst du dort prüfen, ob sich deine Tabelle seit dem letzten check geändert hat. https://www.tutorialspoint.com/get-the-date-t…-mysql-database

    Um dann nur geänderte Daten anzuzeigen ist es am sinnvollsten, wenn du in der Datenbank eine neue Spalte anlegst mit einem Timestamp, der bei jeder Änderung der Zeile aktualisiert wird.

    In deinem Programm kannst du dann immer nur die eine kleine Abfrage machen, ob sich die Tabelle(n) geändert haben und wenn ja, alle Zeilen abfragen, bei denen der Timestamp >= deiner letzten Abfrage ist.

    Ich würde aber max. alle paar Sekunden abfragen, ob sich etwas geändert hat. Kommt aber natürlich auf den Anwendungsfall an. Wenn es aber so oft Änderungen gibt, solltest du darüber nachdenken, ob nur eine Datenbank das Richtige ist, oder ob es sinnvoll ist, der Datenbank eine Messagequeue o.ä. vorzuschalten.

    Zu 2.:

    Es macht vmtl. Sinn, die Aktualisierung nur laufen zu lassen, wenn das Fenster im Fokus ist, bzw. wenn es nicht im Fokus ist, zu checken, ob es sichtbar ist (Ansätze dafür: https://www.autoitscript.com/forum/topic/15…ndow-is-on-top/). Ggf. dann noch ein check auf IDLE.

    Das wären meine Ideen, um das ganze zumindest halbwegs Performant zu gestalten.

    MfG Kanashius.

  • Hallo Kanashius,

    das mit dem Hash war auch nur eine Idee, es würde ja schon eine Random Zahl reichen die ich in eine Extra Tabelle lege, und immer wenn ich eine Änderung mache die Zahl random ausgetauscht wird und als $var im Script dann gespeichert wird, dann kann ich diese zahlen vergleichen und wenn diese Zahl eine andere ist als in der DB, dann aktualisiere meine Listen in der Viewlist, und passe die Zahl der Zahl in der DB an. das ist quasi das gleiche wie zu deinem Punkt 1. beschrieben hast. Aber meine Standart Tabellen wollte ich jetzt eigentlich nicht unbedingt verändern. Deshalb die Idee mit einfach einer neuen Tabelle aber in der selben Datenbank die nur diesen einen Eintrag besitzt.


    eine Messagequeue o.ä. vorzuschalten.

    Du meinst direkt in der Datenbank?
    Da bin ich noch zu ungeübt :). Oder meinst du die While schleife in autoit.

    Zu 2.:

    Es macht vmtl. Sinn, die Aktualisierung nur laufen zu lassen, wenn das Fenster im Fokus ist, bzw. wenn es nicht im Fokus ist, zu checken, ob es sichtbar ist (Ansätze dafür: https://www.autoitscript.com/forum/topic/15…ndow-is-on-top/). Ggf. dann noch ein check auf IDLE.

    genau das habe ich am Anfang auch gedacht, wusste bloß nicht wie es umsetzte ich schaue es mir heute Abend den link mal genauer an.
    Danke schon mal für die unterstützenden worte :).

    EDIT :@ Kanashius, habe den ersten link in deinem schreiben erst grad entdeckt ^^ das sieht vielversprechend aus

    2 Mal editiert, zuletzt von MojoeB (21. Juni 2022 um 19:33) aus folgendem Grund: link entdeckt