Seite 1 von 1
Staendige Aktualisierung
Verfasst: 09.11.2009 10:21
von Tsuki-Namida
Hallo,
ich moechte in minem Tool einen thred machden, da rin soll dann alle X Min (1 bis 60) eine Ueberpruefung von meheren Server stadfinden. Also ob der Server online ist oder nicht.
Meine frage ist nun.
Wie kann ich am besten den thred anhalten bis die & Minuten abgelaufen sind?
Wenn ich die System Uhr staendig ueberwache dann belaste ich ja den CPU genausound das ist ja nich mein Ziehl...
Lieben Dank schon mal in voraus...
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 10:27
von ts-soft
Wenn Du PB4.40 verwendest, dort gibt es direkt Timer-Befehle, ansonsten mal nach SetTimer_ API suchen, Threads sind hierfür
nicht erforderlich, bzw. sinnvoll.
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 11:08
von NicTheQuick
Oder wenn du es trotzdem mit Threads machen willst, dann überprüfe eben nur alle 1000 ms, ob die 60 Sekunden schon vorbei sein. Dann belastet du die CPU auch nicht.
Jetzt mal so dahingecodet.
Code: Alles auswählen
Procedure Thread(dummy.i)
Protected time.i = ElapsedMilliseconds() + 60000
Repeat
If (ElapsedMilliseconds() >= time)
;führe Server-Abfrage aus
time + 60000
EndIf
Delay(1000)
Forever
EndProcedure
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 19:54
von Tsuki-Namida
@ ts-soft
ich muss leider ein Thred mach.... da sonst in der Wartezeit das gesamte Programm anhalte... und dann bei der Überprüfung von mehrere Server bleibt die Anwendung ja auch stehen, ich habe mitbekommen das bei OpenNetworkConnection() die Anwendung eine weile stehen bleibt und vor allem wenn der angegebene Server Offline ist und noch schlimmer wird es wenn man eine geringe internetanbindung hat wie zum Beispiel ISDN oder schlechten UMTS/GPRS Empfang....
@NicTheQuick
Lieben dank ich werde es mal versuchen

Re: Staendige Aktualisierung
Verfasst: 09.11.2009 20:25
von NicTheQuick
Da fällt mir ein. Je nachdem, wie lange die Server-Status-Abfrage dauert, ist es vielleicht besser, wenn du die eine Zeile änderst:
wird zu
Ansonsten würde bei einer Abfragezeit von 50 Sekunden, direkt nach 10 Sekunden wieder die nächste Abfrage gestartet werden. Mit dem zweiten Code-Schnipsel sind zwischen jeder Abfrage immer
genau 60 Sekunden vergangen zwischen Abfrage-Ende und Abfrage-Start.
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 21:52
von Kaeru Gaman
Tsuki-Namida hat geschrieben:@ ts-soft
ich muss leider ein Thred mach.... da sonst in der Wartezeit das gesamte Programm anhalte...
das ist Unsinn. wenn man das anständig programmiert, läuft das Programm wunderbar weiter.
deswegen sagte ts ja auch, du sollst Timer benutzen. Von Delay(60000) hat hier keiner geredet.
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 22:01
von HeX0R
Das ist kein Unsinn, OpenNetworkConnection kann durchaus mal bis zu 10 Sekunden fest sitzen.
Das sollte man eh immer in einen Thread packen, wenn man dem User kein eingefrorenes Fenster zumuten will.
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 22:12
von Kaeru Gaman
ah, ok. dann ist das eine Spezialität von OpenNetworkConnection.
ich bezog mich jetzt auf die Wartezeit zwischen den Tests und ähnliche Prozesse,
für die man keinen thread braucht wenn man sie anständig in die Hauptschleife integriert.
Re: Staendige Aktualisierung
Verfasst: 09.11.2009 22:22
von ts-soft
Wenn ich das in ein TimerCallback pflanze ist das Callback doch auch nicht viel anders als ein Thread.
Das Callback wird doch direkt von Windows aufgerufen, unabhängig vom PB-Event-loop.
Aber mit Netzwerkprogrammierung hab ich bisher nicht viel im Sinn gehabt, müßte er einfach probieren.
Gruß
Thomas