AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi CPU Auslastung eines Delphi-Programms drosseln
Thema durchsuchen
Ansicht
Themen-Optionen

CPU Auslastung eines Delphi-Programms drosseln

Ein Thema von Delphiuser1987 · begonnen am 16. Jun 2010 · letzter Beitrag vom 17. Jun 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#11

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 10:47
Hat Sleep() bei älteren Delphiversionen nicht aktiv gewartet?
Was meinst du mit "aktiv gewartet" ?

Sleep() ruft nur die entsprechende Windowsfunktion auf. Unmd die sorgt dafür, dass dem Thread die nächsten x Millisekunden keine Rechenzeit zugewiesen wird. Wenn man also Sleep(1000) aufruft, friert der Thread für 1 Sekunde ein, weil er keine Rechenzeit mehr bekommt. (dafür sorgt der Scheduler voin Windows)
Ein Sleep(0) erscheint damit im ersten Moment sinnlos. Es sorgt aber dafür, dass der Thread sofort von der CPU genommen wird und hinten in die Warteschlange kommt. Also die Abarbeitung wird vorzeitig abgebrochen und der nächste Thread kommt an die Reihe.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#12

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 10:53
Ein anderer Vorschlag
Delphi-Quellcode:
uses Tlhelp32;

{$R *.dfm}
function getPid(const name: string): integer;
  var
    hProcSnap: THandle;
    pe32: TProcessEntry32;
begin
    result:= 0;
    hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
    if hProcSnap = INVALID_HANDLE_VALUE then exit;
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
       while Process32Next(hProcSnap, pe32) = true do
       begin
        if lowerCase( pe32.szExeFile) = name then
        begin
         result:= pe32.th32ProcessID;
         break;
        end;
       end;
    CloseHandle(hProcSnap);
end;

Procedure SetProcessPriority(const fn:String;Priority:Integer);
{IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS , HIGH_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS}
var
   newhandle:Thandle;
begin
    newhandle := OpenProcess(PROCESS_SET_INFORMATION, false, getPid(fn));
    setpriorityclass(newhandle, Priority);
    CloseHandle(newhandle);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
   SetProcessPriority(Lowercase(ExtractFileName(Application.ExeName)),IDLE_PRIORITY_CLASS);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#13

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 12:00
bei 1.000 oder 10.000 könnte man auch gleich einen Timer verwenden ... wozu da erst einen weiteren "rießigen" Thread laufen lassen, welchen das System auch noch verwalten muß.
Durch MsgWaitForMultipleObjects() wird IMO auch nur der aktuelle Thread schlafen gelegt. Ein bischen wie ein Sleep() mit Message Queue. Und wenn er schon ein funktionierendes Programm hat, das halt schon mit ner Schleife arbeitet, ist er mit der Delay-Funktion schnell fertig. Viele Wege führen nach Rom. Und "besser" ist halt auch ne Standpunkt-Frage.

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 12:06
@Bummi: Warum so kompliziert. Nimm doch einfach GetCurrentProcess
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#15

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 12:29
@SirThornberry

stimmt in diesem Fall ....

der Fetzen Code stammte aus einer Anwendung die eigentlich Fremde Prozesse umpriorisiert.

sorry ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Delphiuser1987

Registriert seit: 29. Apr 2010
31 Beiträge
 
#16

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 16. Jun 2010, 13:07
danke Leute, Sleep(50) hat funktioniert.
Vorher 100% jetzt 11%.
Auf euch ist halt verlass
Bis zum nächsten Mal

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: CPU Auslastung eines Delphi-Programms drosseln

  Alt 17. Jun 2010, 08:02
Hat Sleep() bei älteren Delphiversionen nicht aktiv gewartet?
Aus Sysutils.pas:

Delphi-Quellcode:
{$IFDEF MSWINDOWS}
procedure Sleep; external kernel32 name 'Sleep'; stdcall;
{$ENDIF}
Sleep() ist also aus dem Windows-API und sollte daher in allen Delphi-Versionen gleich funktionieren.
Ralf Kaiser
  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 01:34 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