Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Sleep 50=Sleep 60

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 09.09.2006, 04:53    Titel: Sleep 50=Sleep 60 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 09.09.2006, 20:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 10.09.2006, 00:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 10.09.2006, 03:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 10.09.2006, 11:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 10.09.2006, 12:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 10.09.2006, 12:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 11.09.2006, 01:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 11.09.2006, 09:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 11.09.2006, 14:09    Titel: Antworten mit Zitat

Jups, hast eigentlich Recht;)...
Dann bleibt mir nur noch sleep 1(was bei mir=sleep 15 ist mit den Augen rollen ) +timer.

Habe WinXPHOE+SP2
Na mal sehen was Vista macht;)vllt. ist dort ja das Timerproblem wieder behoben verwundert


Sleep 0 funzt bei mir nicht peinlich
Da kann ich es auch weglassen=Gleicher Effekt Kopf schütteln



mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 11.09.2006, 21:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 11.09.2006, 21:55    Titel: Antworten mit Zitat

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 happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 12.09.2006, 03:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 12.09.2006, 15:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 12.09.2006, 16:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 13.09.2006, 02:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz