Staendige Aktualisierung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Staendige Aktualisierung

Beitrag 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...
Bild
Benutzeravatar
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

Beitrag 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.
Benutzeravatar
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

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

Re: Staendige Aktualisierung

Beitrag 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 :)
Bild
Benutzeravatar
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

Beitrag 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:

Code: Alles auswählen

time + 60000
wird zu

Code: Alles auswählen

time = ElapsedMilliseconds() + 60000
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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Staendige Aktualisierung

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Staendige Aktualisierung

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag 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
Antworten