| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		noop
 
 
  Anmeldungsdatum: 04.05.2005 Beiträge: 259
 
  | 
		
			
				 Verfasst am: 09.09.2006, 03: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, 19: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: 09.09.2006, 23: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, 02: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, 10: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, 11: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, 11: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, 00: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, 08: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, 13: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, 20: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, 20: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, 02: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, 14: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, 15: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, 01: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 | 
		 | 
	
	
		  | 
	
	
		 |