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:

2 Fragen

 
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.07.2009, 08:53    Titel: 2 Fragen Antworten mit Zitat

Gute Morgen allerseits!

Ich hab mal 2 ... "kleine" fragen.. bzw. mir sind ein paar ungereimtheiten aufgefallen.

Zum 1.
Es gibt MID als Funktion und als Anweisung. Mich hat die Anweisung etwas mehr interessiert weil mir dort der Aufbau des Befehlssyntax aufgefallen ist:

MID[$](text, start[, length]) = Ausdruck

Diesen Syntax finde ich eigentlich sehr schick! Wie kann ich eigene Anweisungen in diesem Stil programmieren? (Die Herrn FB-Programmierer haben es ja auch geschafft zwinkern )

Zum 2.

Zu GFX-Lib steht in der FB-Befehlsreferenz folgendes:
(...) Alle Lese/Schreibzugriffe auf den Seitenpuffer (inklusive Direktzugriffe via SCREENPTR) werden im RAM ausgeführt. Bei Win32 und Linux übernimmt ein eigener Thread die Screenupdates (...)

Ich hab selbst mal versucht einen Thread zu programmieren, der sich drum kümmert einen Buffer regelmäßig auf dem Screen zu aktualisieren.
(was mir aus folgenden Grund mislungen ist:)

Das Problem war hierbei nur, das sobald lese/schreibzugriffe des Haupt-threads mit den lese-Zugriffe im Buffer des Update-Threads kolidierten, mein Programm abgeschmiert ist.
Normalerweise kann man ja mit mutexlock und unlock sowas wunderbar synchronisieren. Aber, mit den üblichen Grafikbefehlen greife ich ja direkt auf den Bufferspeicher zu. Da kann ich keinen lock-unlock befehl unterbringen ohne das ich das vor und nach jeder Grafikanweisung reinschreibe. Also ein:

Code:

mutexlock updatethread
line buffer, (x,y)-(a,b),RGB(255,255,255)
mutexunlock updatethread


wäre mir im Hauptprogramm zu viel koderei..
Es sollte wirklich ein:
Code:

line buffer, (x,y)-(a,b),RGB(255,255,255)

ausreichen um eine linie im buffer zu schreiben, die dann der Thread darstellt.

zumal es ja anscheinend ja demjenigen gelungen ist, dieses Problem zu umgehen als er diesen oben erwähnten Update-Thread für die GFX-Lib geschrieben hat.



Vielen Dank schon mal für eure Mühe lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.07.2009, 11:14    Titel: Antworten mit Zitat

Code:
#Macro MUTEXLINE (t, buffer, x, y, a, b, c)
  MutexLock t
  Line buffer, (x,y)-(a,b),c
  MutexUnlock t
#EndMacro


MUTEXLINE(updatethread, buffer, x, y, a, b, RGB(255,255,255))
grinsen
_________________
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.07.2009, 11:35    Titel: Antworten mit Zitat

@Volta: Sowas hätt ich auch in eine normale function reinpacken können. Dafür braucht man kein makro bemühen.

Ausserdem ändert das nichts daran, dass direkte (byte-weise) speicherzugriffe im buffer trotzdem wieder mit dem lese-zugriff des update-threads kollidieren.

Wie machen die das in der GFX-Lib?!? .. ich kann dort in den Screen-Speicher direkt bytes rein und rausschreiben, ohne das deren Update-Thread aus dem tritt kommt!! Sowas will ich auch happy

Es kann ja durchaus vorkommen, das ich den pointer zum buffer an eine funktion übergeben will, die ich nicht programmiert habe.. oder dessen quelltext mir nicht verfügbar ist (über eine API oder ne vorkompilierte LIB). Und trotzdem soll der Update-Thread den buffer regelmäßig ausgeben lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 09.07.2009, 12:19    Titel: Antworten mit Zitat

ein Makro ist hier deutlich schneller als eine Funktion / sub ... die Funktion / Sub muss erst "aufgebaut" werden, bevor sie ausgeführt wird. ein Makro hingegen ist eine erstetzung des quelltextes .. ohne sub / function.

Zu deinem Problem: ka, was du genau für ein problem hast.

Aber, wenn du schreibzugriffe in den speicher hast, und einen update thread brauchst, dann zeichne doch in einen eigenen speicher, und nutze den update-thread um deinen speicher auf den screen speicher zu blitten.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.07.2009, 12:20    Titel: Antworten mit Zitat

was heisst "blitten" ?

Hat einer noch eine idee zu meiner 1. frage?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 09.07.2009, 15:31    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
ein Makro ist hier deutlich schneller als eine Funktion / sub ... die Funktion / Sub muss erst "aufgebaut" werden, bevor sie ausgeführt wird. ein Makro hingegen ist eine erstetzung des quelltextes .. ohne sub / function.


Der Compiler sorgt eigentlich dafür, dass in dermaßen simplen fällen dir kein performance-verlust entsteht (inlining!).. ich bin mir nicht sicher ob fbc schlecht genug ist um das nicht zu machen, aber man sollte eigentlich erwarten können dass er das wegoptimiert..
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 09.07.2009, 15:47    Titel: Antworten mit Zitat

Ich weiß nicht ob sich das schon geändert hat, aber soweit ich weiß optimiert der FBC nicht.
_________________
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
Jojo
alter Rang


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

BeitragVerfasst am: 09.07.2009, 17:52    Titel: Antworten mit Zitat

"optimiert nicht" ist eine sehr generische aussage und dass er GAR nicht optimiert, scheint mir nicht sehr glaubhaft.
_________________
» 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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 13.07.2009, 08:27    Titel: Antworten mit Zitat

ich wollte mich nochmal melden, besonders wegen meiner ersten frage XD ..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 13.07.2009, 11:21    Titel: Antworten mit Zitat

http://www.google.de/search?hl=de&safe=off&q=blitter&btnG=Suche&meta=
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 13.07.2009, 11:24    Titel: Antworten mit Zitat

ah ok, jetzt weiss ich was blitting ist. aber wie hilft mir das weiter? .. gibts in FB einen befehl dafür den ich einsetzen kann?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 13.07.2009, 12:10    Titel: Antworten mit Zitat

"Blitting" ist eigentlich eher eine Programmiertechnik als eine Komponente. Hierbei wird der zu anzeigende Inhalt nicht direkt in den Speicher für die Direkte ausgabe auf dem Monitor geschrieben, sondern in einen zwischenspeicher. Ist man damit fertig, nutzt man einen sehr schnellen Kopiervorgang (z.B. Bei DX über einen Pointer via FLIP) oder über PUT bzw GET mit FB direkt.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 13.07.2009, 12:18    Titel: Antworten mit Zitat

Ok, mit put und get hatte ich auch vor in dem update-thread zu arbeiten. Aber wie hilft mir diese erkenntnis weiter?
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