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:

sehr langsamer PRINT-Befehl

 
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
hocki



Anmeldungsdatum: 10.10.2007
Beiträge: 9
Wohnort: Hamburg

BeitragVerfasst am: 10.10.2007, 13:36    Titel: sehr langsamer PRINT-Befehl Antworten mit Zitat

Hallo,

nach und nach will ich meine Programme von QB 4.5 auf FreeBasic umstellen, allerdings so, das ich sie möglichst mit beiden Compilern in 16- oder -32Bit ExEs umwandeln kann.

Dabei fällt mir auf, das der PRINT-Befehl unter FB quälend langsam abläuft. Dies hat zur Folge, das ein Programm mit einer komplexen Textmaske als FB-Programm den Bildschirm unattraktiv langsam aufbaut ! Als QB 4.5-Programm läuft es sehr flott.

Was ist da los? Gibt es einen Weg, den PRINT-Befehl (immerhin einer der häufigsten Befehle) zu beschleunigen ? Oder muss ich auf die nächste FB-Compilerversion warten ?

Schöne Grüße an die Gemeinde
Reiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.10.2007, 14:14    Titel: Antworten mit Zitat

Musst du nicht, es würde reichen, wenn du uns mal ein bisschen Quellcode zeigst. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 10.10.2007, 15:22    Titel: Antworten mit Zitat

(Es sei angemerkt, dass ein Print auf die Konsole immer sehr lange dauert. Selbst bei der StdLib von C++ konnte ich kaum einen Geschwindigkeitszuwachs unter Win feststellen.)
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.10.2007, 15:34    Titel: Antworten mit Zitat

Naja, es wäre angebracht, wenn du das "lange" mal als relativ auffasst.
Warum sollte das Ganze mit C++ auch schneller gehen? Wenn du in C++ std::cout verwendest, greift das dann auch bloß intern wieder auf die Windows-APIs zu.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

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

Mao hat Folgendes geschrieben:
Wenn du in C++ std::cout verwendest, greift das dann auch bloß intern wieder auf die Windows-APIs zu.
Das stimmt so nicht. std::cout funzt auch ganz ohne Windows im reinen DOS, hat also nix mit WinAPI zu tun.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.10.2007, 17:48    Titel: Antworten mit Zitat

Natürlich funzt das auch auf DOS. Genauso wie auf Linux, HP-UX, FreeBSD und auf nahezu jedem System mit verfügbarem C++-Compiler sowie angepasster Bibliotheken.
Da er aber konkret von alten QuickBasic 4.5-Programmen spricht und wohl die wenigsten QB unter anderen Systemen als DOS oder Windows einsetzen, hab ich meinen Kommentar eben auf Windows bezogen.
Es ist natürlich Sache der jeweiligen Lib, wie das ganze konkret implementiert ist, aber es wird immer auf System-APIs zurückgegriffen!
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hocki



Anmeldungsdatum: 10.10.2007
Beiträge: 9
Wohnort: Hamburg

BeitragVerfasst am: 11.10.2007, 00:13    Titel: Antworten mit Zitat

Ihr wollt Code ? Hier kommt ein Beispiel:

DEFDBL A-C
DEFINT I-M

CLS
ati1 = TIMER
FOR iMM = 1 TO 5
iX = 1
FOR iX = 1 TO 70 STEP 1
FOR iY = 1 TO 23
LOCATE iY, iX: PRINT STRING$(9, "#")
NEXT iY
NEXT iX
NEXT iMM

adiff = ati1 - TIMER
PRINT adiff
SLEEP (1000 * 10)
END

Compiliert mit QB4.5 braucht das kl. Programm ca. 0,15 Sek. zur Darstellung, mit FB ca. 60 Sek. !

p.s. Ich habe eine 550 Mhz-Maschine... aber der Unterschied bleibt doch !

Viele Grüße
Reiner
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: 11.10.2007, 00:32    Titel: Antworten mit Zitat

Dauerte noch nicht mal ne Sekunde hier... 1900 MHz.
Meine Vermutung: QBasic kann direkt BIOS-Funktionen zur Textausgabe benutzen. Es verwenden den "echten" Text-Screen. FB benutzt dagegen die Konsole, die eine Grafikanwendung ist, die eben durch die GDI (Die Windows-Grafikbilbiothek) gesteuert wird. Hast du z.B. alte oder falsche Graka-Treiber installiert, könnte sich das auf die Programmgeschwindigkeit auswirken.

btw...
Zitat:
(immerhin einer der häufigsten Befehle)

das kommt ganz auf den user an zwinkern Ich hab PRINT schon seit jahre nicht mehr benutzt... höchstens zu debug-zwecken, aber niemals in Programmen.
_________________
» 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
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 11.10.2007, 06:25    Titel: Antworten mit Zitat

Wie oft denn noch!?
Der PRINT Befehl ist einfach langsam in der Konsole unter Win. fertig. basta.
Nimm einenn Grafikscreen. zwinkern
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

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

Hallo,

versuch vielleicht mal, am Anfang des Programms, noch bevor CLS/PRINT/... benutzt werden, in der FreeBasic-Variante des Programms ein
Code:
SCREEN 17,4

einzufügen. Ich habe dein Beispiel mal dahingehend geändert: http://www.freebasic-portal.de/fbporticula/207

Auf meinem PC erreiche ich dadurch einen Geschwindigkeitszuwachs von rund 75%. Das liegt daran, dass bei Vorhandensein von DirectX dieses zur Beschleunigung der Grafikausgabe im Grafik-SCREEN benutzt wird.

Welche FreeBASIC Version benutzt du eigentlich? Herausfinden kannst du das durch die Ausführung des im Folgenden verlinkten Programms: http://www.freebasic-portal.de/fbporticula/208

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
hocki



Anmeldungsdatum: 10.10.2007
Beiträge: 9
Wohnort: Hamburg

BeitragVerfasst am: 11.10.2007, 15:26    Titel: Antworten mit Zitat

Hallo ihr,
Danke für eure Hinweise !

Kurzfristig hilfreich war Dein Tip, Sebastian, den SCREEN einzustellen. Führt wirklich zu viel höherer Performance, jetzt wirkt mein Programm nicht mehr steinzeitlich. Bischen lästig ist dann nur der Doppelrahmen.

Von Dir, Jojo, wüßte ich gern, wie Du PRINT oder PRINT USING (bin ich halt sehr gewohnt !) in einem einfachen, textbasierten Programm ersetzt.

Ich habe halt den Wunsch, zunächst mal zweigleisig zu compilieren, ohne das jew. Programm immer umfangreich umzuschreiben.

Schöne Grüße
Reiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 11.10.2007, 15:34    Titel: Antworten mit Zitat

Meinst du mit "Doppelrahmen", dass ein Konsolen- und ein Grafikfenster geöffnet ist?
Dann compiliere das Programm mit "-s gui" als Switch. Wie das geht, findest du über die Boardsuche. (Ist auch schon bebildert beschrieben wurden.)
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.10.2007, 19:20    Titel: Antworten mit Zitat

Hallo Reiner,

verwendest du die FBIDE zum Bearbeiten und Compilieren deiner Programme mit FreeBasic? Wenn ja, kannst du wie folgt den "Doppelrahmen" abschalten:



In der Kommandozeile kannst du den Effekt so erreichen:
Code:
fbc -s gui datei.bas


Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 11.10.2007, 20:56    Titel: Antworten mit Zitat

hocki hat Folgendes geschrieben:
Von Dir, Jojo, wüßte ich gern, wie Du PRINT oder PRINT USING (bin ich halt sehr gewohnt !) in einem einfachen, textbasierten Programm ersetzt.


Ganz einfach: Ich programmiere in FB nur Spiele oder grafische Anwendungen, in denen das durch DRAW STRING ersetzt wird durchgeknallt Wie gesagt, es hängt ganz vom zweck des Programms ab...
_________________
» 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
hocki



Anmeldungsdatum: 10.10.2007
Beiträge: 9
Wohnort: Hamburg

BeitragVerfasst am: 12.10.2007, 19:23    Titel: Antworten mit Zitat

alles klar !

...kein "Doppelrahmen" mehr mit -s gui ! Ich nutze übrigens den Jellyfish pro Editor, der kanns natürlich auch. Beim FBIDE vermisse ich die Druckfunktion.

Tschüss bis zur nächsten Frage,
schöne Grüße
Reiner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 13.10.2007, 15:39    Titel: Antworten mit Zitat

Das schnellste (von der Performance her) ist immernoch der Grafikpuffer..
Villeicht schreib ich mal irgendwann eine Lib dafür zwinkern
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 13.10.2007, 16:15    Titel: Antworten mit Zitat

Wofür eine lib?! O_o
Für eine Anwendung à la
Code:

screenlock
print "hi!"
screenunlock

??? peinlich
_________________
» 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
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 13.10.2007, 16:25    Titel: Antworten mit Zitat

Hast du AndT's tolle "QB-Emulation" auf fb-porticula noch nicht gesehen?
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 13.10.2007, 17:04    Titel: Antworten mit Zitat

Gegen Screenlock spricht wirklich nichts
Zusmmen mit Draw String ist das sogar genauso schnell wie Puffer.
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 13.10.2007, 17:54    Titel: Antworten mit Zitat

wow, mao, überaus komplex! geschockt lachen durchgeknallt

ich sag einfach gar nix mehr...
_________________
» 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
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