Programm auf Anweisung warten lassen



  • Hallo zusammen.

    Ich hab mir ein Programm geschrieben, welches in regelmäßigen vom User festgelegten Intervallen eine Datei von einem Server abruft und ausliest.

    Sobald man das Programm verbinden lässt, startet ein neuer Thread. Dieser ruft dann eine Funktion auf, in welcher sich eine While-Schleife befindet, die solange alle X Sekunden die Datei aktualisiert, bis der User auf einen Button klickt, um die Verbindung zu trennen (dafür auch der Thread, damit das Programm noch auf nachrichten reagiert).

    Nun, da allerdings konstant die While Schleife läuft, ist die CPU Last immer auf 100%. Wenn ich mir dann aber Programme wie z.B. TotalCommander anschauen, die alle X Sekunden einen NOOP befehl senden zum Aufrecht-Erhalten der Verbindung, befinden sich diese aber tatsächlich im Leerlauf, ohne dass die CPU benötigt wird.

    Wie kann ich das realisieren, konstant prüfen, ob die Datei wieder abgefragt werden soll, ohne eben diese Rechenintensive schleife zu haben?

    Vielen Dank schonmal und Grüße.



  • mein vorschlag zur güte:
    starte für den aktualisierungsvorgang einen timer bei dessen aufruf du die datei aus dem netz aktualisierst.
    Presst der user dann den abbruch-button dann cancelest du den timer.
    durch verwendung von timern brauchst du dann auch nicht mehr unbedingt die threads zu benutzen.
    ist es das was du meintest?



  • Oh mann.. die Antwort liegt so auf der Hand. Hatte (da ich das auch noch nicht lang mache) Timer bisher noch nie verwendet, nur früher in VB.

    Aber vielen Dank, hab das jetzt über Timer gelöst 🙂



  • bitte, gern geschehn



  • einLiterVollmilch schrieb:

    Hallo zusammen.

    Timer sind nicht immer die Lösung!
    Platziere ein "Sleep(2)" in der Schleife, damit die CPU nicht mehr voll belastet wird.



  • sky21 schrieb:

    einLiterVollmilch schrieb:

    Hallo zusammen.

    Timer sind nicht immer die Lösung!
    Platziere ein "Sleep(2)" in der Schleife, damit die CPU nicht mehr voll belastet wird.

    Mit der Lösung hab ich aber das Problem, dass meine Anwendung nicht vollständig auf eine Message z.B. zum Drücken des Abbrechen Buttons reagiert.



  • einLiterVollmilch schrieb:

    sky21 schrieb:

    einLiterVollmilch schrieb:

    Hallo zusammen.

    Timer sind nicht immer die Lösung!
    Platziere ein "Sleep(2)" in der Schleife, damit die CPU nicht mehr voll belastet wird.

    Mit der Lösung hab ich aber das Problem, dass meine Anwendung nicht vollständig auf eine Message z.B. zum Drücken des Abbrechen Buttons reagiert.

    Korrekt. du must halt innerhalb des threads auf ein abbruchkriterium gucken.
    wenn du bei deiner situation nun auf den button klickst und dann genau zu diesem zeitpunkt code der "OnTimer" funktion ausgeführt wird, dann bleibt dein programm stehen bzw. stürzt ab.



  • Richtig, und damit das Programm auch währenddem reagiert müsste ich wieder Threads verwenden (so hatte ich es ursprünglich gemacht). War aber nicht sonderlich gut, siehe oben.


Anmelden zum Antworten