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:

unerklärliches Geschwindigkeitsphänomen

 
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
JMS



Anmeldungsdatum: 21.02.2016
Beiträge: 10

BeitragVerfasst am: 21.02.2016, 18:15    Titel: unerklärliches Geschwindigkeitsphänomen Antworten mit Zitat

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


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

BeitragVerfasst am: 21.02.2016, 18:58    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 21.02.2016
Beiträge: 10

BeitragVerfasst am: 22.02.2016, 00:21    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 22.02.2016, 01:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 22.02.2016, 02:16    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 22.02.2016, 12:26    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.02.2016, 13:08    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 21.02.2016
Beiträge: 10

BeitragVerfasst am: 22.02.2016, 15:32    Titel: Antworten mit Zitat

Hab es jetzt mit der "Timer-Methode" gemacht und funktioniert. lächeln
Danke !

Grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 22.02.2016, 17:12    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.02.2016, 23:33    Titel: Antworten mit Zitat

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


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

BeitragVerfasst am: 23.02.2016, 23:50    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 24.02.2016, 00:09    Titel: Antworten mit Zitat

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