Staendige Aktualisierung
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
Staendige Aktualisierung
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...
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...

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Staendige Aktualisierung
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.
nicht erforderlich, bzw. sinnvoll.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Staendige Aktualisierung
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.
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
- Tsuki-Namida
- Beiträge: 633
- Registriert: 17.11.2005 13:27
- Kontaktdaten:
Re: Staendige Aktualisierung
@ 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
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


- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Staendige Aktualisierung
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.
Code: Alles auswählen
time + 60000
Code: Alles auswählen
time = ElapsedMilliseconds() + 60000
genau 60 Sekunden vergangen zwischen Abfrage-Ende und Abfrage-Start.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Staendige Aktualisierung
das ist Unsinn. wenn man das anständig programmiert, läuft das Programm wunderbar weiter.Tsuki-Namida hat geschrieben:@ ts-soft
ich muss leider ein Thred mach.... da sonst in der Wartezeit das gesamte Programm anhalte...
deswegen sagte ts ja auch, du sollst Timer benutzen. Von Delay(60000) hat hier keiner geredet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Staendige Aktualisierung
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.
Das sollte man eh immer in einen Thread packen, wenn man dem User kein eingefrorenes Fenster zumuten will.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Staendige Aktualisierung
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Staendige Aktualisierung
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
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