AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Befehl immer wieder ausführen ohne CPU belastung

Befehl immer wieder ausführen ohne CPU belastung

Ein Thema von BlueLiquidCell · begonnen am 29. Jun 2010 · letzter Beitrag vom 10. Jul 2010
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Luckie
Luckie
(Moderator)

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

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 7. Jul 2010, 12:27
Sag mal, macht ihr euch auch mal Gedanken über die eure Themenüberschriften?
Zitat:
Befehl immer wieder ausführen ohne CPU belastung
Wenn das ginge, warum ist denn dann eine CPU überhaupt im Rechner drin?

Ich weiß nicht, ob das schon gesagt wurde, aber lass die CPU doch arbeiten, dazu hast du sie doch gekauft. Und so lange sie Rechenzeit abgibt, wenn andere Prozesse sie benötigen, ist doch alles in Ordnung. Eventuell sollte man sich ein anderes Konzept überlegen. Du rennst ja auch nicht alle fünf Minuten an die Tür und guckst, ob jemand davor steht, dazu hast du ja eine Klingel. die dich benachrichtigt, wenn jemand davor steht. Also anstatt immer das Fenster in den Vordergrund zu holen, über Sinn und Unsinn lasse ich mich jetzt nicht aus, könnte man überlegen, ob man eine Möglichkeit findet sie nur in den Vordergrund zu holen, wenn es nötig ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#22

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 7. Jul 2010, 12:33
Auch dafür gibt es einen Hook, der dann ausgibt, wann ein Fenster den Fokus bekommt/entzogen bekommt oder erschaffen wird. siehe msdn

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#23

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 7. Jul 2010, 12:49
Also das mit der WM_NACTIVATE funktioniert zwar aber der Sound bleibt trotzdem aus.

Mit den Hooks muss ich mir mal genauer anschaun, davon hab ich keine Ahnung aber danke für den Tip

@ Luckie
Ich brauch die CPU Leistung für nen Spiel. Deswegen ist die Überschrift so! Versteh jetzt nicht was daran so schlimm ist?

PS: Warum können die das denn nicht einfach ordentlich Programmieren

Geändert von BlueLiquidCell ( 7. Jul 2010 um 13:19 Uhr)
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#24

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 8. Jul 2010, 21:26
Hooks?!
Also das mit den Hooks versteh ich net so wirklich. Hat jemand Ahnung davon? Könntet ihr nen kleines Beispiel zum Fenster und Maus hook hier rein schreiben?
Vielen Dank!
Christoph
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
89 Beiträge
 
Delphi XE3 Professional
 
#25

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 9. Jul 2010, 11:21
Das ist ein ganz alter Sound-Code. Weiss nicht, was Du etwas davon gebrauchen kannst.
Warnungen wirst Du sehen. Funktionieren sollte er aber schon.

Beachte bitte, dass "Beep" in mehreren Units vorhanden ist.
Es gibt einen von system, utils, windows oder so.


Delphi-Quellcode:
unit Sound_ausgabe;
Interface
uses windows, sysutils;
Procedure Tonausgabe;
procedure Sound(aFreq, aDelay: Integer) ;
procedure NoSound;

//******************************************************************************
implementation
Procedure Tonausgabe;
begin
 {
aufrufen mit:
  Tonausgabe; // Ausgabe auf dem Systemlautsprecher, also ohne Boxen



Sound(500, 100) ; //erst Ton, dann Dauer
  Sound(590, 90) ;
  Sound(710, 160) ;  // klingt falsch
  Sound(440, 100) ; //erst Ton, dann Dauer
  Sound(880, 90) ;
  Sound(260, 160) ;  // klingt wie ein nervendes Spiel
 
  Sound(260, 90);
  Sound(440, 100);
   Sound(880, 100); }


   Sound(440,200);
   NoSound;
end;
{
G: 440
a, eine Oktave tiefer (leere A-Saite) hat genau die halbe Schwingungszahl, nämlich 220 Hz
(Oktaven bilden also immer exakte Vielfache oder glatte Quotienten einer Grundzahl.
Die Oktaven zum Ton a (= 440 Hz) liegen nach unten bei 220, 110, 65, 32,5
und 16,25 Hz, nach oben bei 880, 1760 Hz usw.)

Frequenz: 136,10 Hertz (Ton: CIS)
Frequenz: 147,85  Hertz (Ton: D)
Frequenz: 172,06 Hertz (Ton: F)  22.12
Frequenz: 194,18 Hertz (Ton: G)
Frequenz: 210,42 Hertz (Ton: GIS) 16.24
Frequenz: 221,23 Hertz (Ton: A)
Frequenz: 194,18 Hertz (Ton: Ais) ???
Frequenz: 241,56 Hertz (Ton: H)

}



procedure SetPort(address, Value: Word) ;
var
   bValue: Byte;
begin
   bValue := trunc(Value and 255) ;
   asm
     mov dx, address
     mov al, bValue
     out dx, al
   end;
end;
//******************************************************************************
function GetPort(address: Word): Word;
var
   bValue: Byte;
begin
   asm
     mov dx, address
     in al, dx
     mov bValue, al
   end;
   GetPort := bValue;
end;
//******************************************************************************
procedure Sound(aFreq, aDelay: Integer) ;
////////////////////////////////////////////////////////////////////////////////
   procedure DoSound(Freq: Word) ;
   var
     B: Byte;
   begin
     if Freq > 18 then
     begin
       Freq := Word(1193181 div Longint(Freq)) ;
       B := Byte(GetPort($61)) ;

       if (B and 3) = 0 then
       begin
         SetPort($61, Word(B or 3)) ;
         SetPort($43, $B6) ;
       end;

       SetPort($42, Freq) ;
       SetPort($42, Freq shr 8) ;
     end;
   end;
////////////////////////////////////////////////////////////////////////////////
   procedure Delay(MSecs: Integer);// habe vor GetTick Count 2x Abs() eingefügt
   var
     FirstTickCount: Integer; //vorher: LongInt; sollte ident sein
   begin
     FirstTickCount := Abs(GetTickCount);
     repeat
       Sleep(1) ;
       //or use Application.ProcessMessages instead of Sleep
     until ((Abs(GetTickCount) - FirstTickCount) >= Longint(MSecs)) ;
   end;
//GetTickCount aus Kernel:
// Retrieves the number of milliseconds that have elapsed since the system was started
////////////////////////////////////////////////////////////////////////////////
begin
   if Win32Platform = VER_PLATFORM_WIN32_NT then
   begin
     Windows.Beep(aFreq, aDelay) ;
   end
   else
   begin
     DoSound(aFreq) ;
     Delay(aDelay) ;
   end;
end;
//******************************************************************************
procedure NoSound;
var
   Value: Word;
begin
   if not (Win32Platform = VER_PLATFORM_WIN32_NT) then
   begin
     Value := GetPort($61) and $FC;
     SetPort($61, Value) ;
   end;
end;
//******************************************************************************
end.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#26

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 9. Jul 2010, 11:41
Bitte einmal Pizza für Jonas Wagner und eine große Portion Eis und einen Ventilator für Nicole Wagner
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
BlueLiquidCell

Registriert seit: 29. Jun 2010
63 Beiträge
 
Delphi 2 Desktop
 
#27

AW: Befehl immer wieder ausführen ohne CPU belastung

  Alt 10. Jul 2010, 22:41
Hallo Nicole
Danke für den Code. Wirklich verstehen tue ichs aber net. Vlt bin ich aber auch zu doof
Christoph
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf