| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| JMS 
 
 
 Anmeldungsdatum: 21.02.2016
 Beiträge: 10
 
 
 | 
			
				|  Verfasst am: 21.02.2016, 18:15    Titel: unerklärliches Geschwindigkeitsphänomen |   |  
				| 
 |  
				| Hallo ! 
 Ich habe aktuell ein unerklärliches Geschwindigkeitsphänomen.
 
 Ich habe im Freebasic-Konsolenfenster ein Programm geschrieben(ASCII-Modus) mit so einer Art Laufschrift.
 Nun zum Phänomen:
 Wenn ich gleichzeitig eine PDF-Datei im Reader öffne ( z.B. Freebasic-.Handbuch ) läuft das Programm erheblich schneller als wenn ich keine PDF-Datei gleichzeitig geöffnet habe !
 ich habe in einer For/next-Schleife  "Sleep" eingebaut, damit die Laufschrift als Laufschrift wahrnehmbar ist.
 Tut der PDF-Reader etwa die Zeit beschleunigen ?
 Verwundert bin ich.
 
 Wer kann etwas dazu sagen ?
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 21.02.2016, 18:58    Titel: |   |  
				| 
 |  
				| Die Granularität des Windows-Timers liegt typischerweise bei 15ms. Einige Programme erhöhen diese Granularität für zeitkritische Tasks auf 1ms, was unter anderem die Sleep-Auflösung ebenfalls von 15ms auf 1ms erhöht, aber andererseits auch erheblich mehr Strom benötigt (was bei Laptops u.ä. besonders relevant ist). Dein "Sleep 1", das du höchstwahrscheinlich verwendest, ist in Wirklichkeit also ein "Sleep 15" (ungefähr), und du solltest dich nicht darauf verlassen, wie lange es wirklich dauert, denn ein anderes Programm könnte genau so gut die Granuralität auf 8ms oder einen sonstigen Wert stellen. _________________
 » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| JMS 
 
 
 Anmeldungsdatum: 21.02.2016
 Beiträge: 10
 
 
 | 
			
				|  Verfasst am: 22.02.2016, 00:21    Titel: |   |  
				| 
 |  
				| Hallo 
 Aha, das kannte ich noch nicht.
 Habe mal probeweise Sleep 15 gemacht und ja, dann ist es so langsam wie ohne PDF-Reader geöffnet.
 
 Die einzige Lösung ist dann ja nur kein Sleep zu nehmen, sondern in die for-Schleife noch eine For-Schleife als "Verlangsamer" einzubauen.
 Dann ist es der Effekt so ähnlich wie bei "Sleep 1 + PDF-Reader geöffnet".
 
 Grüße
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 22.02.2016, 01:25    Titel: |   |  
				| 
 |  
				| hm, eine For-Schleife ist normalerweise eine schlechte Idee, da es ja völlig abhängig vom Prozessor ist, auf dem es läuft. 
 Versuche Timer zu verwenden, oder OS-spezifische Funktionen wie QueryPerformanceCounter.
 _________________
 Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
 http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Flo aka kleiner_hacker
 
 
 Anmeldungsdatum: 23.06.2006
 Beiträge: 1210
 
 
 | 
			
				|  Verfasst am: 22.02.2016, 02:16    Titel: |   |  
				| 
 |  
				| nein, die Lösung ist, ein "sleep" mit einer Zeit über 15ms zu benutzen (d.h. mit einer Zeit, die nicht durch deine momentan granularität beeinflusst wird) _________________
 MFG
 Flo
 
 Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
 
 zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| St_W 
 
  
 Anmeldungsdatum: 22.07.2007
 Beiträge: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 22.02.2016, 12:26    Titel: |   |  
				| 
 |  
				|  	  | Flo hat Folgendes geschrieben: |  	  | nein, die Lösung ist, ein "sleep" mit einer Zeit über 15ms zu benutzen (d.h. mit einer Zeit, die nicht durch deine momentan granularität beeinflusst wird) | 
 Wenn das möglich ist, dann ja. Wenn allerdings Delays < 15ms erwünscht sind, dann wird das nicht funktionieren. Eventuell wirst du für solche Anforderungen z.B. auf Methoden wie ZwSetTimerResolution und NtDelayExecution zurückgreifen müssen.
 _________________
 Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
 http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 22.02.2016, 13:08    Titel: |   |  
				| 
 |  
				| Solche Warteschleifen lassen sich auch sehr einfach mit Bordmitteln von FB erzeugen:  	  | Code: |  	  | Dim As Double pause = Timer + .001 '1ms Do
 Loop While Timer < pause
 | 
 
 Gruß
 grindstone
 _________________
 For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| JMS 
 
 
 Anmeldungsdatum: 21.02.2016
 Beiträge: 10
 
 
 | 
			
				|  Verfasst am: 22.02.2016, 15:32    Titel: |   |  
				| 
 |  
				| Hab es jetzt mit der "Timer-Methode" gemacht und funktioniert.   Danke !
 
 Grüße
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 22.02.2016, 17:12    Titel: |   |  
				| 
 |  
				| grindstone: Der FB-Interne Timer verwendet genau denselben Timer intern, wird also auch von unterschiedlichen Timer-Raten beeinflusst. Unter Windows muss man für sowas QueryPerformanceCounter verwenden. _________________
 » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 23.02.2016, 23:33    Titel: |   |  
				| 
 |  
				| Das kann ich nicht bestätigen. Als Zeitnormal ist die Timer - Funktion sicher ungeeignet, aber mit einer Auflösung im mittleren dreistelligen ns - Bereich ist sie zur Erzeugung von Zeitintervallen < 100 ms deutlich besser geeignet als Sleep. 
 Ausgabe: 	  | Code: |  	  | Dim As Double t1,t2,t3,t4,t5,t6,t7,t8,t9 
 t1 = Timer
 t2 = Timer
 t3 = Timer
 t4 = Timer
 t5 = Timer
 t6 = Timer
 t7 = Timer
 t8 = Timer
 t9 = Timer
 Print t1
 Print t2
 Print t3
 Print t4
 Print t5
 Print t6
 Print t7
 Print t8
 Print t9
 Sleep
 | 
 
 2230.07178699749
2230.071787414797
 2230.071787744109
 2230.071788094754
 2230.0717884214
 2230.071788818708
 2230.071789165353
 2230.071789545329
 2230.071789925305
 
 Gruß
 grindstone
 _________________
 For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 23.02.2016, 23:50    Titel: |   |  
				| 
 |  
				| Hm, kann sein dass sich das in FB gebessert hat, ich glaube nicht dass das früher so war. Jedenfalls ist aktives Warten böse und sollte auf Desktop-Systemen nicht verwendet werden. Du erzeugst dadurch eine komplette Systemauslastung! _________________
 » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| grindstone 
 
 
 Anmeldungsdatum: 03.10.2010
 Beiträge: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 24.02.2016, 00:09    Titel: |   |  
				| 
 |  
				| Mein Beispiel von oben ist ja auch nur die allereinfachste Möglichkeit, Verzögerungen zu erzeugen. Innerhalb der Do - Schleife kann man den Rechner ja durchaus mit irgend etwas sinnvollem beschäftigen, solange es das Timing nicht durcheinanderbringt. 
 Und JMS scheint sein Problem ja gerade durch aktives Warten gelöst zu haben.
 
 Gruß
 grindstone
 _________________
 For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |