Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Prioritäten setzen "SetPriorityClass" (https://www.delphipraxis.net/32059-prioritaeten-setzen-setpriorityclass.html)

orion3000 18. Okt 2004 11:37


Prioritäten setzen "SetPriorityClass"
 
Hallo zusammen,

eine Frage wann würdet Ihr Prioritäten in euren Projekten setzten?

ich habe folgenden Code in meine Anwendung in Formcreate
gelegt.

Delphi-Quellcode:
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Da meine Anwendung das System sehr belastet.

und dann in Formclose

Delphi-Quellcode:
SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);

SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_NORMAL);
bingt das überhaupt etwas?

Ich bin mir einfach nicht sicher ....

Gruß
Orion3000

Dax 18. Okt 2004 11:40

Re: Prioritäten setzen "SetPriorityClass"
 
Ich würde in meinen Projekten immer dann Priorities setzten, wenn die Standardeinstellung nicht den Nutzen bringt, den sie sollte.

BtW: Bist du dir sicher, dass diese Frage in die Codelib gehört?

Tubos 18. Okt 2004 21:46

Re: Prioritäten setzen "SetPriorityClass"
 
Zitat:

ich habe folgenden Code in meine Anwendung in Formcreate
gelegt.


Delphi-Quellcode:
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Da meine Anwendung das System sehr belastet.
Was erwartest du dir von der Änderung?
Dass das Programm schneller läuft? Da wird es kaum einen Unterschied geben wenn keine anderen Programm laufen.
Dass das System weniger ausgelastet wird? Genau das wird nicht passieren.

Wenn du sagst was du dir davon erwartest kann dir jemand sagen ob es was bringt oder nicht.

Luckie 18. Okt 2004 22:04

Re: Prioritäten setzen "SetPriorityClass"
 
Dir ist bewußt, dass du mit diesen Prioritäten dein gesamten System lahmlegen und unbrauchbar machen kannst? Selbst Systemprozesse laufen mit einer geringeren Priorität als REALTIME_PRIORITY_CLASS. Es kann dir passieren, dass du noch nicht mal mehr den TaskManager öffnen kannst.

Wenn es nötig erscheint zu solchen Mitteln zu greifen, dann sollte man sein Konzept noch mal überdenken. In den seltensten Fällen ist es nötig die Prozesspriorität anzuheben.

DP-Maintenance 18. Okt 2004 22:05

DP-Maintenance
 
Dieses Thema wurde von "Luckie" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Windows API" verschoben.
Falsche Sparte. :roll:

orion3000 19. Okt 2004 12:12

Re: Prioritäten setzen "SetPriorityClass"
 
Hallo Zusammen,

einmal Danke für Eure Hilfe!

Ich hatte da schon eine leise Ahnung daß dies nicht so funzt wie ich zuerst dachte.

@Tubos
Dass das System weniger ausgelastet wird? Genau das wird nicht passieren

Genau das hatte ich eigentlich gehofft, bin aber schon selbst darauf gekommen das dies nicht funktioniert!

Vieleicht erkläre ich einfach mal ein Prob:

Ich starte meine Fibuanwendung und dabei werden eine oder mehr Anwendungen gestartet das funktioniert auch ganz gut.

Nun werden die gestarteten Progs. nicht beendet sondern der Fokus auf meine Anwendung gelegt und irgendwelche Einträge in einer Datenbank geändert oder hinzugefügt usw.

Dabei wird dann mein System dermassen ausgelutscht das ich die Anwendungen beenden muß und erst nachdem ich meine Anwendung beendet habe und neu gestartet geht alles wieder ganz normal.

Ich bin schon soweit gekommen das dies auf anderen Rechnern genauso abläuft dabei habe ich nicht das gefühl das es an Windows sondern an meinem Prog. liegen muß!

Starte ich die Fibbu , Kassenanwendung ohne ein anderes Programm zu starten dann geht alles einwandfrei nur eben wenn ich andere Programme dazustarte gibt es ärger.

Gruß
Orion3000

rlossin 2. Feb 2006 14:40

Re: Prioritäten setzen "SetPriorityClass"
 
Hallo,

kann man auch für fremde Prozesse die Priorität ändern? Wenn das möglich wäre, wäre das extrem gut und wichtig für mich.

Ich möchte mit meinem Programm nämlich prüfen, ob der Windows Media- Player läuft und diesem dann eine etwas höhere Priorität zuweisen. Habt ihr da ein paar Codebeispiele oder Vorschläge?

Vielen Dank!

Roman

Luckie 2. Feb 2006 14:51

Re: Prioritäten setzen "SetPriorityClass"
 
Wie man der Dokumentation entnehmen kann erwartet SetPriorityClass als ersten Parameter die ProcessID.

rlossin 2. Feb 2006 15:23

Re: Prioritäten setzen "SetPriorityClass"
 
Okay, danke erst einmal für die Antwort...
Nun ist die Frage: Wie finde ich die ID eines fremden Prozesses heraus? Ich weiss nur den Pfad, wo die Datei liegt, ich weiss nicht, ob sie läuft oder nicht. Wie finde ich dann die ID heraus?

Gruß

Roman

Luckie 2. Feb 2006 15:26

Re: Prioritäten setzen "SetPriorityClass"
 
Entweder mit Hier im Forum suchenEnumProcesses oder einem Hier im Forum suchenSnapshot.

Basilikum 2. Feb 2006 15:33

Re: Prioritäten setzen "SetPriorityClass"
 
Zitat:

Zitat von Luckie
Wie man der Dokumentation entnehmen kann erwartet SetPriorityClass als ersten Parameter die ProcessID.

also meiner Doku (Platform SDK) entnehme ich, dass selbige API einen Handle (nicht ID) des Prozesses erwartet.....

Luckie 2. Feb 2006 15:34

Re: Prioritäten setzen "SetPriorityClass"
 
Oder so. Ich war mir nicht sicher was GetCurrentProcess zurückliefert.

rlossin 2. Feb 2006 21:59

Re: Prioritäten setzen "SetPriorityClass"
 
Hat jemand n Beispiel, wie ich das dann verknüpfe?
Ich muss leider eingestehen, dass ich von Delphi nicht so die Ahnung habe, aber es ist relativ wichtig. Ich würde auch einen kleinen Betrag dafür zahlen.
Also ein Programm, was schaut ob exe XY.exe läuft, und wenn ja, die Priorität auf "höher als normal" setzt. Wäre total super!!!!

Grüße

Roman

thomasw 2. Feb 2006 22:42

Re: Prioritäten setzen "SetPriorityClass"
 
Es gibt nur relativ wenige Gruende, die es rechtfertigen mit hoeherer Prioritaet als normal zu arbeiten.

rlossin 2. Feb 2006 22:50

Re: Prioritäten setzen "SetPriorityClass"
 
Es geht um einen Film der laufen soll, ohne dass er stockt, während ein anderes Programm nebenbei läuft.

Ich habe es schon mit dem Taskmanager ausprobiert, wenn man es da einstellt, klappt es gut. Nun will ich es automatisiert.

Elvis 2. Feb 2006 23:28

Re: Prioritäten setzen "SetPriorityClass"
 
Zitat:

Zitat von rlossin
Es geht um einen Film der laufen soll, ohne dass er stockt, während ein anderes Programm nebenbei läuft.

Benutze Overlays für die Wiedergabe, dann wird das Rendering an die Hardware delegiert.

Wie bereits x-Mal beschrieben: Prioritäten ändern deutet auf 2 mögliche Ursachen hin: falsche Architektur oder nicht alle anderen verfügbaren Mittel verwendet. ;)
Die Priorität zu ändern bringt, wenn man das ganze System betrachtet, rein gar nix positives. Was sich dein Prozess krallt fehlt dann woanders.

sh17 3. Feb 2006 09:38

Re: Prioritäten setzen "SetPriorityClass"
 
Zitat:

Zitat von Elvis
Die Priorität zu ändern bringt, wenn man das ganze System betrachtet, rein gar nix positives. Was sich dein Prozess krallt fehlt dann woanders.

Wenn man einem arbeitsintensiven Hintergrund-Prozess eine niedrigere Priorität zuweist, bringt das für den Benutzer schon etwas positives.

Vjay 3. Feb 2006 11:53

Re: Prioritäten setzen "SetPriorityClass"
 
Da ich dir keine fertige Lösung bieten möchte:

Schau dir mal die Hilfe zu "OpenProcess" an.

Die PId des WMPlayers bekommst du so:

Delphi-Quellcode:
//if getPid('wmplayer.exe') <> 0 then läuft

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);

 { wenn es geklappt hat }
 if Process32First(hProcSnap, pe32) = true then
   { und los geht's }
   while Process32Next(hProcSnap, pe32) = true do
   begin
    if lowerCase( pe32.szExeFile) = name then
    begin
     result:= pe32.th32ProcessID;
     break;
    end;
   end;
 CloseHandle(hProcSnap);
end;
Die Unit TlHelp32 mußt du mit einbinden. Damit solltest du es hinbekommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 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 by Thomas Breitkreuz