Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 09.09.2006, 04:53 Titel: Sleep 50=Sleep 60 |
|
|
Hallo,
Ich hatte schon mal ein ähnliches Problem in den FB-Bug Report Thread gepostet.
Wenn ich Sleep 1 benutze ist dies länger als 1ms.
Da wurde mir gesagt, dass es ein Windowsproblem ist.
Jetzt fällt mir auf, dass wenn ich Sleep 50 benutze das fast genauso lange dauert wie Sleep 60.
Code: |
t!=timer
for w=1 to 1000
sleep 50
next w
print timer-t!
t!=timer
for w=1 to 1000
sleep 55
next w
print timer-t!
t!=timer
for w=1 to 1000
sleep 60
next w
print timer-t!
t!=timer
for w=1 to 1000
sleep 65
next w
print timer-t!
sleep
|
Ergebnis:
Sleep 50=62.4948sec
Sleep 55=62.4981sec
Sleep 60=62.4985sec
Sleep 65=75.1228sec
Ist dies auch ein Windowsproblem oder ist das ein BUG von FB?
(Ich weiß jetzt nicht ob das bei alten Versionen auch so war...)
mfg noop |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.09.2006, 20:53 Titel: |
|
|
erstmal: benutz zum messen double# und NICHT single!
damals sind wir zum schluss gekommen, dass es daran liegen kann, dass windows ja während dieser zeit anderen programme die kontrolle gibt, was evtl etwas länger dauern könnte. btw, ich hatte auch mal das problem,dass der fb-timer recht instabil läuft, aber seltsamerweise SEHR stabil lief, als winamp an war...das könntest du auchmal porbieren! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 10.09.2006, 00:40 Titel: |
|
|
Oder einfach mit -profile kompilieren, damit gehts bei mir immer gut.
Code: |
Sub sleep50
Sleep 50
End Sub
Sub sleep60
Sleep 60
End Sub
sleep50
sleep60
|
Wenn du den code mit "fbc <dateiname> -profile" kompilierst, dann wird in dem ordner, wo die .exe ist nach der ausführung eine datei "profile.txt" erstellt. Dort steht drin, welche sub/function welche zeit zur ausführung gebraucht hat. |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 10.09.2006, 03:01 Titel: |
|
|
Winamp kann ich leider nicht hier installlieren.
Wäre ja auch etwas umständlich um ein Programm fehlerfrei zu nutzen ersteinmal winamp installieren zu müssen;)
Ergebnis miy -profile:
Code: |
Profiling results:
------------------
Executable name: time.exe
Launched on: 09-10-2006, 12:52:06
Total program execution time: 124.6 seconds
Per function timings:
Function: Time: Total%: Proc%:
(main) 124.63809 100.00%
SLEEP50 62.47822 50.13% 50.13%
SLEEP60 62.14842 49.86% 49.86%
SLEEP50 62.47822 50.13%
SLEEP 62.46195 50.11% 99.97%
SLEEP60 62.14842 49.86%
SLEEP 62.14345 49.86% 99.99%
Global timings:
(main) 124.63809 (100.00%)
SLEEP50 62.47822 (50.13%)
SLEEP 62.46195 (50.11%)
SLEEP60 62.14842 (49.86%)
|
Dann werde ich wohl auf WinAPI Timer zurückgreifen.
Der funktioniert hoffentlich etwas exakter.
In diesem Test hier ist Sleep 60 ja sogar einen Tick schneller als Sleep 50...
mfg noop |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 10.09.2006, 11:03 Titel: |
|
|
Hi,
in einem Beitrag im engl. Forum (Link finde ich gerade nicht) ging es darum das SLEEP 14400000 nicht 4 Stunden sondern länger brauchte.
v1ctor erlärte sinngemäß, dass dabei die WinAPI 'sleep'-Funktion unter Windows benutzt wird und das ständig auch eine Tastaturabfrage erfolgt, die das Prog noch langsamer mache.
Sleep 14400000, 1 hatte hier Abhilfe geschaffen.
Das Problem von noop scheint dies aber nicht zu erklären, da bei sleep <100 keine Abfrage auf Tastenunterbrechung erfolgt.
Mit Sleep ist kein präzisions Timer machbar, ich benutze da lieber Timer in einer do .. loop Schleife.
Gruß Volta
EDIT/ http://www.freebasic.net/forum/viewtopic.php?p=46737#46737 _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 10.09.2006, 12:00 Titel: |
|
|
Ich denke auch, es liegt an windows.
ich habe jetzt mal unter linux getestet:
Code: |
Profiling results:
------------------
Executable name: /home/hml/Michael/fb.bas/a
Launched on: 09-10-2006, 12:07:35
Total program execution time: 0.1104 seconds
Per function timings:
Function: Time: Total%: Proc%:
(main) 0.11040 100.00%
SLEEP60 0.06002 54.37% 54.37%
SLEEP50 0.05036 45.62% 45.62%
SLEEP50 0.05036 45.62%
SLEEP 0.05035 45.61% 99.98%
SLEEP60 0.06002 54.37%
SLEEP 0.06000 54.35% 99.97%
Global timings:
(main) 0.11040 (100.00%)
SLEEP60 0.06002 (54.37%)
SLEEP50 0.05036 (45.62%)
SLEEP 0.05035 (45.61%)
|
Wie man sieht ist Sleep hier sehr genau.
Die kleine abweichung interessiert eh keinen^^ |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 10.09.2006, 12:56 Titel: |
|
|
Ein richtiges Problem ist es auch nicht.
Ich muss dann vor dem Programm nur so eine Art Benchmarking laufen lassen und dann testen wie lange Sleep x wirklich dauert.
TIMER würe ich normal auch benutzen wenn da nicht das Problem mit der Prozessorauslastung wäre...
mfg noop |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 11.09.2006, 01:16 Titel: |
|
|
benutz einfach timer in kombination mit "sleep 0", das dürfte das beste sein.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 11.09.2006, 09:43 Titel: |
|
|
Hi,
sage mal @noop mit welcher Windowsversion arbeitest du?
Ich habe auf ME die gleichen (eigentlich ganz guten) Ergebnisse wie programmierer auf Linux.
Ist das wieder einmal nur auf XP so seltsam?
Vermutlich bringt ein Benchmarking vorher auch nicht die gewünschte Genauigkeit, da du bei 3 verschiedenen Sleep-Zeiten Zitat: | Ergebnis:
Sleep 50=62.4948sec
Sleep 55=62.4981sec
Sleep 60=62.4985sec
| ein gleiches Ergebniss bekommst. Wie willst du da eine Referenz ermitteln?
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 11.09.2006, 14:09 Titel: |
|
|
Jups, hast eigentlich Recht;)...
Dann bleibt mir nur noch sleep 1(was bei mir=sleep 15 ist ) +timer.
Habe WinXPHOE+SP2
Na mal sehen was Vista macht;)vllt. ist dort ja das Timerproblem wieder behoben
Sleep 0 funzt bei mir nicht
Da kann ich es auch weglassen=Gleicher Effekt
mfg noop |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 11.09.2006, 21:18 Titel: |
|
|
MisterD hat Folgendes geschrieben: | benutz einfach timer in kombination mit "sleep 0", das dürfte das beste sein.. |
sleep 0 is doch das selbe wie getkey, wennschon, dann sleep 1! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 11.09.2006, 21:55 Titel: |
|
|
Sleep 0 SOLL soweit ich weiß sowas wie DoEvent sein.
Bei mir bewirkt das zwar nichts, aber ich sehe es des öfteren in Programmen.
Das was du meinst, ist Sleep -1.
Code: | Declare Sub Sleep (millisekunden As Integer=-1) |
So ist die Sub deklariert, wenn ich das richtig gelesen habe  |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 12.09.2006, 03:20 Titel: |
|
|
mmh, sleep -1 ist bei mir wie sleep
Aber mit WinAPI hat man auf jeden Fall aktzeptablere Ergebnisse.
SleepAPI 1 dauert bei in etwa 1.9ms
Jehöher die Wartezeit, desto genauer. |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 12.09.2006, 15:06 Titel: |
|
|
noop hat Folgendes geschrieben: | mmh, sleep -1 ist bei mir wie sleep |
Ist ja auch richtig so.
Wenn man die Parameter bei sleep weglässt, dann wird automatisch "-1" genommen, das ist in der deklaration definiert:
Declare Sub Sleep (millisekunden As Integer=-1)
das "=-1" gibt an, das der wert "-1" genommen wird, falls man den parameter auslässt. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.09.2006, 16:00 Titel: |
|
|
Hi,
aus der engl. Befehlsreferenz:
Zitat: | The accuracy of SLEEP is variable depending on the OS cycle time (Windows NT/2K/XP: 15 ms, 9x/Me: 50 ms, Linux 10ms, DOS 55 ms). | http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgSleep
Das würde die Ungenauigkeiten bei XP erklären, aber am Firmenrechner (mit XP PROF SP1) ausprobiert gleich gute Ergebnisse (max. +2% Abweichung) wie auf ME??
Und auf 9x/ME sind die sleep-Zeiten nicht nur in 50ms Sprüngen möglich.
Also dieser Teil der engl. Befehlsreferenz zu 'sleep' scheint mir etwas fragwürdig. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 13.09.2006, 02:50 Titel: |
|
|
Zitat: |
Windows NT/2K/XP: 15 ms
|
So sehen meine Ergebnisse auf jeden Fall schonmal aus.
Vllt. wurde auf XPHOE getestet und bei Prof wird das von Windows anders geregelt(obwohl das komisch wäre). |
|
Nach oben |
|
 |
|