AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe Mein Programm Laggt!

Ein Thema von Magic94 · begonnen am 20. Dez 2010 · letzter Beitrag vom 21. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
Magic94

Registriert seit: 21. Nov 2010
31 Beiträge
 
Delphi 7 Personal
 
#1

Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 01:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 05:16
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.
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
$2B or not $2B

Geändert von himitsu (20. Dez 2010 um 05:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 05:24
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 11:59
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.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 12:39
Hallo,

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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 13:44
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.
  Mit Zitat antworten Zitat
Magic94

Registriert seit: 21. Nov 2010
31 Beiträge
 
Delphi 7 Personal
 
#7

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 19:10
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?)
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#8

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 21:37
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..
  Mit Zitat antworten Zitat
Magic94

Registriert seit: 21. Nov 2010
31 Beiträge
 
Delphi 7 Personal
 
#9

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 22:24
, was ich wie mache?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Hilfe Mein Programm Laggt!

  Alt 20. Dez 2010, 22:45
, was ich wie mache?
Du darfst auch ganze Sätze formulieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.
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