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:

Screenlock vs PageFlip

 
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 07.03.2013, 08:30    Titel: Screenlock vs PageFlip Antworten mit Zitat

Vor einiger Zeit hatte ich das Gefühl einiges an Performance einzubüßen durch häufiges nutzen von Screenlock/Screenunlock gegenüber in von mir sehr alten Programmen genutzen PageFlip verfahren.

In diesem eher schlechten Versuch das miteinander zu vergleichen scheint Screenlock deutlich die bessere Methode zu sein...

Code:
Namespace dbuff
    Dim scrActive  as Integer
    Dim scrVisible as Integer
End Namespace

#Define dbInit dbuff.scrActive  = 1 : dbuff.scrVisible = 0 : ScreenSet dbuff.scrActive,dbuff.scrVisible :
#Define dbFlip swap dbuff.scrActive, dbuff.scrVisible : ScreenSet dbuff.scrActive,dbuff.scrVisible :

Randomize Timer

screenres 800,600,32,2


Dim dbTimer as Double
Dim dbTime  as Double

Dim nmTimer as Double
Dim nmTime  as Double

dbTimer = Timer
dbInit
for s as integer = 0 to 99
    cls

    For l as integer = 0 to 99
        line(rnd*800,rnd*600)-(rnd*800,rnd*600),rnd*&hFFFFFF
    Next l

    dbFlip

next s
dbTime = Timer-dbTimer

ScreenSet 0,0
nmTimer = Timer
for s as integer = 0 to 99
    screenlock
    cls

    For l as integer = 0 to 99
        line(rnd*800,rnd*600)-(rnd*800,rnd*600),rnd*&hFFFFFF
    Next l

    screenunlock

next s
nmTime = Timer-nmTimer

?dbTime
?nmTime
sleep


Was genau passiert bei Screenlock/Screenunlock eigentlich und ist es wirklich die 'schnellere' Wahl... der Vorteil jedenfalls liegt auf der Hand..
Speichersparender da keine extra Seite benötigt wird...
Viel einfacher zu implementieren...

Aber wirklich 'schneller'?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 07.03.2013, 11:38    Titel: Antworten mit Zitat

Hi,
vermutlich ist Screenlock/Screenunlock schneller, da hier das kopieren in das Video-RAM entfällt (gesperrt wird).
Beim PageFlip bleibt es beim kopieren aber von zwei verschiedenen Seiten.
Je nach Anwendung sind dies aber zwei verschiedene Methoden die auch zu unterschiedlichen Ergebnissen führen.
_________________
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
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 07.03.2013, 13:32    Titel: Antworten mit Zitat

Was passiert bei SCREENLOCK bzw. SCREENUNLOCK.

Die Antwort findet man im Quelltext, kommt mal mit.

Schauen wir uns erstmal den FBGFX-Kontext an, zu finden in fb_gfx.h ab Zeile 238. driver ist der Pointer auf den benutzten Treiber; die Struktur wird direkt dadrunter definiert.
Treiber müssen die Funktionen lock/unlock implementieren, welche 1:1 auf screenlock und screenunlock abgebildet werden.

Der win32-Treiber implementiert das mit einer gemeinsamen critical section (gfx_win32.c:50, update_lock), die von fb_hWin32Lock respektive fb_hWin32Unlock betreten und verlassen wird.
Der Linux-Treiber für framebuffer macht das ganz ähnlich und nutzt pthread-Mutexe.
Der X11-Treiber nutzt auch pthread-Mutexe und sperrt gleichzeitig die Verbindung zum X-Server mit XLockDisplay (was nicht den Bildschirm sperrt o.ä., sondern tatsächlich nur den Zugriff für den eigenen Prozess).

Achja, Geschwindigkeit. Solange du alles aus einem Thread heraus machst, kostet das Sperren/entsperren wenig.
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