Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
JMS
Anmeldungsdatum: 21.02.2016 Beiträge: 10
|
Verfasst am: 21.02.2016, 19: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, 19: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, 01: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: 949 Wohnort: Austria
|
Verfasst am: 22.02.2016, 02: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, 03: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: 949 Wohnort: Austria
|
Verfasst am: 22.02.2016, 13: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: 1211 Wohnort: Ruhrpott
|
Verfasst am: 22.02.2016, 14: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, 16: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, 18: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: 1211 Wohnort: Ruhrpott
|
Verfasst am: 24.02.2016, 00: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.
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 | Ausgabe:
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: 24.02.2016, 00: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: 1211 Wohnort: Ruhrpott
|
Verfasst am: 24.02.2016, 01: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 |
|
|
|