![]() |
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: ![]() Man kann die Examples per Batch installieren. Und einfach auf LOAD klicken. Die Eingabe SAVE ist bereit richtig. |
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 ![]() ![]() |
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. |
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. |
AW: Hilfe Mein Programm Laggt!
Hallo,
Zitat:
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 |
AW: Hilfe Mein Programm Laggt!
Hast schon recht:
![]() 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. |
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?) |
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.. |
AW: Hilfe Mein Programm Laggt!
, was ich wie mache?
|
AW: Hilfe Mein Programm Laggt!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz