Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Hilfe Mein Programm Laggt! (https://www.delphipraxis.net/156896-hilfe-mein-programm-laggt.html)

Magic94 20. Dez 2010 00:00

Hilfe Mein Programm Laggt!
 
Hallo,
ich habe mich mal daran gemacht, über Delphi (7) einen Beeptracker zu schreiben. Mit diesem Programm kann man den PC in verschiedenen Frequenzen beepen lassen, und sogar ganze Lieder damit schreiben, speichern, laden und abspielen.
Das Programm ist noch sehr verbuggt und haut einem desöfteren (auch bei Fehlbedienung) einen Berg an Fehlermeldungen an den Kopf. Aber das ist erstmal nicht das Problem. Das eigentliche Problem ist, das bei einem Lied mit unterschiedlichen Frequenzen (pro Ton) und unterschiedlicher Länge (pro Ton) der Sound so lange lädt, dass das darüber keinen Spaß mehr macht zu hören.

Zum downloaden:
http://tenac.webhop.net/daten/downloads/btr1.1.rar (Code ist auch dabei, nur leider etwas wüst)

Man kann die Examples per Batch installieren. Und einfach auf LOAD klicken. Die Eingabe SAVE ist bereit richtig.

himitsu 20. Dez 2010 04:16

AW: Hilfe Mein Programm Laggt!
 
Ohne nähere Informationen, was und wie du es machst oder ohne Quelltext in deinem Download, kann dir keiner helfen.

Woher sollen wir denn sonst wissen was falsch läuft?


- Daß dein Programm (beim Klick auf SAVE) und dein "install"-Script einfach so Dateien nach C:\beeptracker speichern wollen, sowas sollte man vorher erwähnen. :warn:
Vorallem da du diese Dateien/Verzeichnisse nicht mehr löschts, bzw. es keinen Deinstaller gibt.
Nicht jeder mag es, wenn jemand einfach so wahllos das System verschmutzt.
Außerdem sind statische Pfade eh unklug.
- Wozu soll der Start-Button gut sein, außer für unnötige Klicks?
- Es wird Usern hier es öffteren gesagt, daß eine gute Fehlerbeschreibung gut wäre.
"einen Berg an Fehlermeldungen an den Kopf" ist Keine ... Welcher Meldungstext da kommt, das kann man doch auch mal sagen? (PS: Strg+C kopiert den Inhalt von Delphidialogen)
- "" ist kein Integer ... ich empfehle dir dich mal mit Fehlerbehandlungen zu beschäftigen.
In diesem Fall vorallem mit Delphi-Referenz durchsuchenTryStrToInt oder Delphi-Referenz durchsuchenStrToIntDef

Luckie 20. Dez 2010 04:24

AW: Hilfe Mein Programm Laggt!
 
Lass dir doch eine neuen Glaskugel zu Weihnachten schenken. Nimm gleich drei, dann gibt es eine umsonst. ;)

Was heißt laggt? Hängt das Programm beim Abspielen, so dass die Töne "stottern" oder reagiert das Programm beim Abspielen der Melodie nicht mehr? Im zweiten Fall könnte eine Thread helfen.

Blup 20. Dez 2010 10:59

AW: Hilfe Mein Programm Laggt!
 
Ist keine Soundkarte vorhanden, verwendet die Funktion Beep() die ganze CPU-Leistung nur dafür, den Lautsprecher 20 ... 20000 mal je Sekunde möglichst synchron ein- und auszuschalten. Wärend dieser Zeit ist das System praktisch ausgelastet. Erst danach wird die Funktion wieder verlassen.
(Unter Windows 7 wird vermutlich deshalb nur noch mit Soundkarte überhaupt etwas ausgegeben.)

Das heist der Timer ist überflüssig, es genügt zwischen den Tönen Application.ProcessMessages aufzurufen.

Valle 20. Dez 2010 11:39

AW: Hilfe Mein Programm Laggt!
 
Hallo,

Zitat:

Zitat von Blup (Beitrag 1069517)
Ist keine Soundkarte vorhanden, verwendet die Funktion Beep() die ganze CPU-Leistung nur dafür, den Lautsprecher 20 ... 20000 mal je Sekunde möglichst synchron ein- und auszuschalten. Wärend dieser Zeit ist das System praktisch ausgelastet. Erst danach wird die Funktion wieder verlassen.

das kann man so nicht ganz stehen lassen. Diese 20.000 Oszillationen pro Sekunden entsprechen eine Frequenz von 20 kHz. Moderne Prozessoren haben mittlerweile wohl weit über 200 MHz. So eine Frequenz lastet keinen Prozessor aus!

Was wahrscheinlich damit gemeint ist, ist dass die Windows Message Queue nicht abgearbeitet wird, solange der Mainthread deines Programmes mit dieser Funktion beschäftigt ist. Beschäftigt heißt in dem Fall aber nicht, dass dein System ausgelastet ist, sondern leidglich, dass dein Programm auf das Ende des Beeps wartet!

Soweit ich weiß - das ist aber wirklich nur Halbwissen - ist der Lautsprecher aber auch über einen extra Prozessor Timer angebunden, um asynchrones Abspielen zu ermöglichen. Sonst hätte man damals, als CPUs wirklich nur 200 kHz hatten, kaum etwas sinnvolles mit Sound und Grafik machen können. Soll heißen, dass du mit Assembler die Frequenz einstellen kannst, anschließend den Lautsprecher auf "ein" schaltest und dein Programm dann dennoch weiterlaufen kann.

Liebe Grüße,
Valentin

Blup 20. Dez 2010 12:44

AW: Hilfe Mein Programm Laggt!
 
Hast schon recht: http://de.wikipedia.org/wiki/Systemlautsprecher
Ich dachte da eher an die Ausgabe von Wav und da ist der Prozessor tatsächlich beschäftig, mit dem ganz genauen Abwarten der Zeitabstände.

Meine Schlussfolgerung bleibt aber:
Der Timer, so wie er hier eingesetzt wird, ist überflüssig und ruft vermutlich den störenden Effekt hervor.

Magic94 20. Dez 2010 18:10

AW: Hilfe Mein Programm Laggt!
 
ist ja alles schön und gut und danke auch erstmal. (auch an himitsu, der das nochmal aufgelistet hat was ich auch schon weiss, und später, sobald dieses Problem beseitigt ist, beheben werde).
Da ich nicht viel Ahnung von Delphi bisher habe, weiss ich nicht was mit Assembler gemeint ist, und was man anstelle des Timers sonst verwenden könnte. Ich schätze zwar nicht so ganz, dass er daran liegt, das das Programm während eines Beeps anhält, da er die Frequenz immer sehr schnell umgeschaltet bekommt:
Freq: 400 Dur:25
Freq: 800 Dur:25
Freq: 1200 Dur:25
....
Das rappelt ja prima runter, ohne überhaupt mal daran zu denken stehen zu bleiben. (oder mag es daran liegen, dass das Programm bei einem anderen Längenwert erstmal den Timer umstellen muss?)

Real_Thunder 20. Dez 2010 20:37

AW: Hilfe Mein Programm Laggt!
 
Lese dich erstmal ein bisschen in Delphi ein.
Später denn auch Themen wie Theading....
Du mußt dir Vorstellen das dein Programm immer in einer Schleife läuft und bei jedem Schleifendurchgang alle
Windows Messages (wie Mausklick, Tastendruck etc) sowie die Programmneuzeichnung abgefragt werden... nun ist er mit deinen Timern ein Wenig beschäftigt
und kann sich nicht mehr um die Windows Messages kümmern... so kommt das Laggen zustande...
Abhilfe schafft es wenn du die ausgabe auf einen neuen Thread packst..

Magic94 20. Dez 2010 21:24

AW: Hilfe Mein Programm Laggt!
 
, was ich wie mache?

Luckie 20. Dez 2010 21:45

AW: Hilfe Mein Programm Laggt!
 
Zitat:

Zitat von Magic94 (Beitrag 1069682)
, was ich wie mache?

Du darfst auch ganze Sätze formulieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz