AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi beep oder windows.beep()
Thema durchsuchen
Ansicht
Themen-Optionen

beep oder windows.beep()

Ein Thema von falk · begonnen am 6. Nov 2003 · letzter Beitrag vom 7. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: beep oder windows.beep()

  Alt 6. Nov 2003, 16:21
Zitat von Falk:
solange die Zeitdifferenz zwischen auslösen beep und dem wirklichen beep konstant ist soll mich das nicht stören. Ist sie das?? Ich vermute mal bei der Soundkarte hängt das sicher noch davon ab, was der Rechner gerade noch so macht. Bei systemlautsprecher doch nicht oder???
Ein Speaker-Sound wird meines Wissens über einen Interrupt ausgelöst. Ein Interrupt unterbricht die momentane Aktion des Prozessors, es sei denn, der Prozessor arbeitet gerade einen Interrupt mit einem höheren Level ab. Musst mal schauenm, vielleicht findeste irgendwo das IRQ-Level des Speakers.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#12

Re: beep oder windows.beep()

  Alt 6. Nov 2003, 16:26
@Falk,

nein, ist sie nicht. Da nützt auch der Interrupt nichts, der kommt erst zum Tragen, wenn der Beep gestartet wurde - und die Zeit bis zum Start ist nicht konstant.

Viele Grüße
Lutz
  Mit Zitat antworten Zitat
falk

Registriert seit: 6. Nov 2003
Ort: Leipzig
9 Beiträge
 
Delphi 4 Professional
 
#13

Re: beep oder windows.beep()

  Alt 6. Nov 2003, 16:59
Zitat von Delphianer:
@Falk,
nein, ist sie nicht. Da nützt auch der Interrupt nichts, der kommt erst zum Tragen, wenn der Beep gestartet wurde - und die Zeit bis zum Start ist nicht konstant.
Und was beeinflusst den Start des Beep?? Windows???

Falk
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#14

Re: beep oder windows.beep()

  Alt 6. Nov 2003, 17:06
Jou!

Sobald sich Dein Programm in den Windows-Untiefen verkrümelt, und das macht es automatisch, wenn Du irgendeine Windows-Funktion aufrufst, hast Du keinen Einfluß mehr. Und das Schlimmste sind unter Win9x die nicht bestimmbaren Auszeiten.
Du müßtest im Prinzip Dein Programm auf tpTimeCritical setzen und alle Funktionen in einer Schleife selbst schreiben, ohne Windows aufzurufen - hat allerdings den Effekt, daß nichts anderes mehr geht. Falls Du auf Win2k/Xp ausweichen kannst, kann ich Dir paar Tips geben, schaffe ich aber heute nicht mehr.

Viele Grüße
Lutz
  Mit Zitat antworten Zitat
falk

Registriert seit: 6. Nov 2003
Ort: Leipzig
9 Beiträge
 
Delphi 4 Professional
 
#15

Re: beep oder windows.beep()

  Alt 6. Nov 2003, 17:40
@Delphianer

ja läuft unter XP

Falk
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#16

Re: beep oder windows.beep()

  Alt 7. Nov 2003, 15:02
Hallo, ist hier noch wer ?


Ich habe mal versucht und hoffentlich nichts vergessen, einige Punkte zu zeitkritischen Programmen unter 2000/XP aufzuschreiben:

1.
PriorityClass von MainProcess hochsetzen - Vorsicht, kann ganzen Computer
lahmlegen - dafür aber die ThreadPriority (vom MainProcess) so niedrig wie möglich

Delphi-Quellcode:
  if SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS) then
  begin
    SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_IDLE);
  end;
2.
die originale Zeitauflösung von 2000/XP ist auf 10ms gesetzt, deshalb

Delphi-Quellcode:
  TimePeriod := 1;
  // die Zeitauflösung auf einen Wert < 10, der Windows genehm ist, setzen
  while (timeBeginPeriod(TimePeriod) = TIMERR_NOCANDO) and (TimePeriod < 10) do
    Inc(TimePeriod);
und am Schluß wieder zurücksetzen

Delphi-Quellcode:
  if TimePeriod <> 10 then
    timeEndPeriod(TimePeriod);
3.
Thread erzeugen, der zeitkritischen Arbeit ausführen soll (das ist das Schnellste, was geht)

Delphi-Quellcode:
  MyThread := TMyThread.Create(True);
  MyThread.Priority := tpTimeCritical;
4.
in Loop vom Thread auf keinem Fall

  Sleep(1); oder

  WaitForSingleObject oder etwas ähnliches vergessen, um Windows Luft zum Atmen zu lassen

Ich hoffe, es hilft.
Lutz
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#17

Re: beep oder windows.beep()

  Alt 7. Nov 2003, 16:14
Im letzten Kasten fehlt

  WaitForSingleObject Viele Grüße
Lutz
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

Re: beep oder windows.beep()

  Alt 7. Nov 2003, 16:16
Was ist das, bitte? Fehlendes Semikolon?

  WaitForSingleObject(..);
Lutz
  Mit Zitat antworten Zitat
falk

Registriert seit: 6. Nov 2003
Ort: Leipzig
9 Beiträge
 
Delphi 4 Professional
 
#19

Re: beep oder windows.beep()

  Alt 7. Nov 2003, 16:47
Danke, erst mal so auf die schnelle.

muß mir alles in ruhe anschauen.

Falk
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:02 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