AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslastung
Thema durchsuchen
Ansicht
Themen-Optionen

(C) Schleife mit HighPerformanceCounter: 100% CPU-Auslastung

Ein Thema von Tubos · begonnen am 18. Mai 2004 · letzter Beitrag vom 19. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#1

(C) Schleife mit HighPerformanceCounter: 100% CPU-Auslastung

  Alt 18. Mai 2004, 21:05
Hallo;

für eine kleine Textanimation in C (nur Konsole) ist mir GetTickCount und Sleep zu ungenau.

Ich habe mir also folgenden Code gebastelt, der in einer Endlosschleife immer 1 sek wartet und dann ausgibt "Eine Sekunde ist um".
Natürlich ist das nur ein Beispiel, die Funktion werde ich noch so umändern, dass sie mit Millisekunden funktioniert.
Code:
__int64 freq,count,old;
int i=0;
if (QueryPerformanceFrequency(&freq)==0)
{
   printf("Fehler, Hardware unterstuetzt keinen High-Performance-Counter!");
   getch();
   exit(EXIT_FAILURE);
}
   for (;;)
{
   QueryPerformanceCounter(&count);
   old=count;
   while (((count-old)/freq)<1)
   {
      QueryPerformanceCounter(&count);
   }
   printf("Eine Sekunde ist um\n");
}
Das funktioniert hervorragend, hat aber einen entscheidenden Nachteil: es lastet die CPU zu 100% aus.
Wenn ich sleep(1) reinschreibe, wartet er aber 5 ms und die Genauigkeit von 1 ms, die ich haben will, wird nicht erreicht.
Was kann ich tun, damit der Computer nicht total ausgelastet wird in dieser Schleife?

EDIT:
sry, bitte nach "allgemeine fragen zum programmieren" verschieben.
danke
Lukas
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#2

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 18. Mai 2004, 21:07
Naja, völlig logisch. Du versorgst ihn die ganze Zeit mit Anweisungen -> 100% Auslastung. Bau trotzdem mal ein sleep(1) ein, das sollte gehen.

Edit: Du könntest es auch in der Nachrichtenschleife abarbeiten.
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#3

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 18. Mai 2004, 22:22
Zitat:
Naja, völlig logisch. Du versorgst ihn die ganze Zeit mit Anweisungen -> 100% Auslastung. Bau trotzdem mal ein sleep(1) ein, das sollte gehen.
Zitat:
Wenn ich sleep(1) reinschreibe, wartet er aber 5 ms und die Genauigkeit von 1 ms, die ich haben will, wird nicht erreicht.
Sleep habe ich schon probiert, das geht aber nur auf 5 ms.


Zitat:
Edit: Du könntest es auch in der Nachrichtenschleife abarbeiten.
Zitat:
für eine kleine Textanimation in C (nur Konsole)
Nur Konsole --> keine Nachrichtenschleife.
Lukas
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 18. Mai 2004, 22:36
Was stört dich das der Prozessor bei 100% läuft, wenn es für die Anwendung angemessen ist.

Nur so kann man auch deine genauigkeit erhalten, die du anstrebst.

Da die ausführung von Sleep oder anderen Prozessor schonenden Funktionen meist mehr als eine ms benötigen.

Und überleg mal wie es zu DOS-Zeiten war.

Delphi-Quellcode:
repeat
  if IsKeyEvent then
     HandleKeyEvent;
  else if IsMouseEvent then
     HandleMouseEvent;
  else if IsMessage then
     HandleMessage;
  else
     Idle;
until false;
So sah damals meine Hauptprogramm-Schleife aus. Die hat auch eine Auslastung von 100% hervorgerufen. Und die Prozessoren laufen Heute noch. Für Spiele gilt übrigens das selbe.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#5

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 18. Mai 2004, 22:40
ok, überzeugt

Danke!
Lukas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 19. Mai 2004, 00:26
Moin!

Sleep() gibt auch automatisch anderen Prozessen Zeit ab, was dann auch zu der Ungenauigkeit führt.

MfG
Muetze1
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#7

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 19. Mai 2004, 07:00
Ja, kann ich mir vorstellen.
Wenn (laut Taskmanager) 240 Threads gleichzeitig laufen, geht es halt nicht dass mein Prog jede Millisekunde drankommt oder nur für 1 ms gestoppt wird.
Lukas
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#8

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 19. Mai 2004, 09:30
Was redet ihr hier über Prozessorauslastung?
Ein Prozessor arbeitet IMMER mit 100% Auslastung. Oder was denkt ihr was der Leerlaufprozess ist?
Das is ne Schleife des Kernels die 100% Prozessorlast verursacht, wenn kein anderes Programm Rechenzeit beansprucht.

Ein Prozessor kann ja schlecht mal kurz ne Pause machen, wenn er nix zu tun hat

Unter DOS isses also sowieso egal, was dein Programm mit dem Prozessor macht, da gibts ja kein Multitasking. Unter Windows klaust du die Rechenzeit halt den anderen Programmen.
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
19. Mai 2004, 10:24
Dieses Thema wurde von "Luckie" von "Sonstige Fragen zu Delphi" nach "Programmieren allgemein" verschoben.
Für NICHT Delphi Fragen ist die Sparte "Programmieren allgemein" da!
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#10

Re: (C) Schleife mit HighPerformanceCounter: 100% CPU-Auslas

  Alt 19. Mai 2004, 10:37
Zitat:
Was redet ihr hier über Prozessorauslastung?
Ein Prozessor arbeitet IMMER mit 100% Auslastung. Oder was denkt ihr was der Leerlaufprozess ist?
Das is ne Schleife des Kernels die 100% Prozessorlast verursacht, wenn kein anderes Programm Rechenzeit beansprucht.
klingt logisch, aber warum läuft dann der lüfter ganz langsam wenn der leerlaufprozess ja 100% cpu belegt?
wenn ich andere programme auf 100% rennen lasse, wird mein lüfter schneller.
Lukas
  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 22:05 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