![]() |
AW: CPU Auslastung eines Delphi-Programms drosseln
Zitat:
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. |
AW: CPU Auslastung eines Delphi-Programms drosseln
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; |
AW: CPU Auslastung eines Delphi-Programms drosseln
Zitat:
Toni |
AW: CPU Auslastung eines Delphi-Programms drosseln
@Bummi: Warum so kompliziert. Nimm doch einfach GetCurrentProcess
|
AW: CPU Auslastung eines Delphi-Programms drosseln
@SirThornberry
stimmt in diesem Fall .... der Fetzen Code stammte aus einer Anwendung die eigentlich Fremde Prozesse umpriorisiert. sorry ... |
AW: CPU Auslastung eines Delphi-Programms drosseln
danke Leute, Sleep(50) hat funktioniert.
Vorher 100% jetzt 11%. Auf euch ist halt verlass :thumb::-D Bis zum nächsten Mal :wink: Gruß |
AW: CPU Auslastung eines Delphi-Programms drosseln
Zitat:
Delphi-Quellcode:
Sleep() ist also aus dem Windows-API und sollte daher in allen Delphi-Versionen gleich funktionieren.
{$IFDEF MSWINDOWS}
procedure Sleep; external kernel32 name 'Sleep'; stdcall; {$ENDIF} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz