Sleep()

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Sleep()

Beitrag von Manfred »

Hi,

wir haben hier des öfteren über den Einsatz von Sleep() gesprochen, das dadurch eine hohe CPU Auslastung vermieden werden kann. Es kam auch der Hinweis, bei Schleifen, in denen viele DbSkip() vorhanden sind, ein Sleep(.1), oder so einzubauen.

Jetzt kommt mal wieder eine Anfängerfrage von mir: Wie ist das bei Dbeval()? Das macht doch auch einen Dbskip() wenn auch nur intern und da ist die Auslastung auch recht hoch? Sollte man da eine Funktion einbauen, oder Sleep mit reinbringen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

Hi,

habe es gerade mal getestet, das bringt es. Allerdings bei einem Sleep(1) wird die Ablaufgeschwindigekeit nahezu halbiert, aber die Auslastung geht von 97% auf knapp 22% runter. Also alles Entscheidungssache....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2471
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 104 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

manfred,

ein Sleep(0) müste doch ausreichen. Wie ist es da mit der Geschwindigkeit ?
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

Hi Klaus,

ooops, das kann man auch machen? Werde ich mal gleich probieren.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

Hi Klaus,

bringt ca. das alte Tempo wieder, bewirkt aber in der Auslastung nichts. über 95%.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
sleep(0) ist ja im Prinzip das gleiche, wie gar kein sleep!
Aber mit sleep(0.1) oder sleep(0.01) hat man dann bessere Ergebnisse.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21248
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 211 Mal
Danksagung erhalten: 71 Mal

Beitrag von Manfred »

Hi MArtin,

ich war mir jetzt nicht sicher, wie klein der Wert gemacht werden kann. Ich werde es einmal mit Sleep(.1) oder so testen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

fast hätte ich hier Käse geschrieben, aber der Blick ins Handbuch macht vieles klarer ;-) :

Sleep( <nTime> ) --> NIL

Parameter

<nTime>

<nTime> ist eine positive Ganzzahl, die das Zeitintervall in 1/100 Sekunden festlegt, für das ein Thread in einen Wartezustand übergehen soll.

Also 1 = 1/100 Sek., 0.1 = 1/1000 Sek., 0.01 = 1/10000 Sek., 100 = 1 Sekunde (so schläft man dahin :D )

Grundsätzlich gehen also sehr kleine Werte, aber ich denke mal, dass 0.1 so ziemlich das kleinste ist, was noch spürbare Unterschiede bringt, aber auch hier geht Probieren über Studieren :-)

Bei PowerBasic wird der gleiche Befehl mit einer LONG Integer aufgerufen (nur ganze Zahlen, keine Nachkommastellen), wobei dort 1/1000 als Zählwert zählt. Dort steht dass ein Timeslice zwischen 20/1000 und 128 /1000 Sekunden dauert. Somit macht es wohl keinen Sinn in Xbase++ Werte unter 0.1 zu verwenden.

Bei PowerBasic wirkt der Befehl sleep(0) übrigens so, dass der aktuelle Task zwar nicht für eine Bestimmt Zeit angehalten wird, aber der nächte Task aktiv wird. Falls das grundsätzlich im BS so geregelt ist, könnte
das auch für Xbase++ gelten.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm,
wenn es eine Ganzzahl sein muß, geht 0.1 als Parameter natürlich nicht.
Aber ist ja kein Problem - man kann ja auch sleep( 1 ) nehmen, aber dann halt nicht bei jedem Schleifendurchlauf, sondern nur bei jedem 10. oder jedem 100. - das entspräche ja dann in etwa 0.1 bzw. 0.01 als Parameter und ist wahrscheinlich sogar noch effektiver!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi,

ich habe bisher immer Sleep(001) genommen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
Rolf Ramacher hat geschrieben:ich habe bisher immer Sleep(001) genommen.
nun - das ist ja das selbe wie sleep( 1 )

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

Martin Altmann hat geschrieben:Hmm,
wenn es eine Ganzzahl sein muß, geht 0.1 als Parameter natürlich nicht.
Hallo Martin,

ich schrieb von PowerBasic, bei denen der Befehl als GANZZAHL angegeben werden muss. Dort stellt diese Zahl die Anzahl der Millisekunden dar, bei uns hingegen 1/100 Sekunden. Daraus schließe ich, dass 0.1 der kleinste Wert in Xbase++ ist, der unterschieden wird.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
das war mir nicht klar, dass Du das auch auf PowerBasic bezogen hattest.
Aber trotzdem: Bei uns ist es nicht 1/100 Sekunden, sondern n/100 Sekunden! Und auch bei uns muß n eine Ganzzahl sein (laut Onlinehilfe) - also insofern ist der kleinste (sinnvolle) Wert eine 1 und man muss es halt nur alle 10, 100 oder 1000 Durchläufe ausführen...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

Martin Altmann hat geschrieben:Aber trotzdem: Bei uns ist es nicht 1/100 Sekunden, sondern n/100 Sekunden! Und auch bei uns muß n eine Ganzzahl sein (laut Onlinehilfe) - also insofern ist der kleinste (sinnvolle) Wert eine 1 und man muss es halt nur alle 10, 100 oder 1000 Durchläufe ausführen...
Dass in der Onlinehilfe steht, es darf nur eine Ganzzahl sein, habe ich noch nicht gelesen. 0.1 nehme ich gerne, für den Prozessor ist das ne lange Zeit. Aber - ich bin jetzt schon mehrere Jahrzehnte nicht mehr in der Schule gewesen ;-) - meine Aussage dass der Paramter n in 1/100 Sekunden ist, entspricht doch genau deiner, dass n/100 Sek. dauert:

n * 1/100 == n/100 oder irre ich da ;-)

100 entspricht einer Wartezeit von einer Sekunde oder ?
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
genau - 100 ist eine Sekunde.
Und klar ist Deine Aussage 1/100 Sekunde richtig - aber eben nur für n=1 :wink:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15710
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 73 Mal
Danksagung erhalten: 38 Mal
Kontaktdaten:

Beitrag von brandelh »

brandelh hat geschrieben:Hallo Manfred,

fast hätte ich hier Käse geschrieben, aber der Blick ins Handbuch macht vieles klarer ;-) :

Sleep( <nTime> ) --> NIL

Parameter

<nTime>

<nTime> ist eine positive Ganzzahl, die das Zeitintervall in 1/100 Sekunden festlegt, für das ein Thread in einen Wartezustand übergehen soll.

Also 1 = 1/100 Sek., 0.1 = 1/1000 Sek., 0.01 = 1/10000 Sek., 100 = 1 Sekunde (so schläft man dahin :D )

Grundsätzlich gehen also sehr kleine Werte, aber ich denke mal, dass 0.1 so ziemlich das kleinste ist, was noch spürbare Unterschiede bringt, aber auch hier geht Probieren über Studieren :-)

Bei PowerBasic wird der gleiche Befehl mit einer LONG Integer aufgerufen (nur ganze Zahlen, keine Nachkommastellen), wobei dort 1/1000 als Zählwert zählt. Dort steht dass ein Timeslice zwischen 20/1000 und 128 /1000 Sekunden dauert. Somit macht es wohl keinen Sinn in Xbase++ Werte unter 0.1 zu verwenden.

Bei PowerBasic wirkt der Befehl sleep(0) übrigens so, dass der aktuelle Task zwar nicht für eine Bestimmt Zeit angehalten wird, aber der nächte Task aktiv wird. Falls das grundsätzlich im BS so geregelt ist, könnte
das auch für Xbase++ gelten.
Hallo Martin,

hier zitiere ich nochmal meinen Beitrag, oben hatte ich das Handbuch
kopiert und dort steht doch tatsächlich GANZZAHL - ich muss blind
gewesen sein ;-) ... und darunter meine Aufzählungen :
Also 1 = 1/100 Sek., 0.1 = 1/1000 Sek., 0.01 = 1/10000 Sek., 100 = 1 Sekunde (so schläft man dahin :D )
Natürlich ist 1/100 Sek. die Einheit, die mit dem Parameter multipliziert werden muss ...
ich kann nichts finden wo ich was anderes behauptet habe ...
allerdings gebe ich zu, dass ich recht fertig bin. NEIN nicht vom Sekt,
sondern vom Schuften. Samstag kamen wir auf die Idee mal was im Wohnzimmer umzustellen ...
Montag wurden wir nicht fertig, also noch Dienstag Urlaub eingereicht. Morgen Abend wirds aber bestimmt was ... :D
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16586
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
jaja - wenn man erstmal anfängt, ein wenig umzuräumen... :roll:
Viel Glück, dass es bald ausgestanden ist.
Was anderes hattest Du nicht wirklich geschrieben - nur unter Umständen anders "verstehbar".
Wie gesagt: Ganzzahl - also Dein zweites Zitat geht eben nicht...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Antworten