Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Priorität des eigenen Programms erhöhen/erniedrigen (https://www.delphipraxis.net/77109-prioritaet-des-eigenen-programms-erhoehen-erniedrigen.html)

Der_Ventilator 14. Sep 2006 18:18


Priorität des eigenen Programms erhöhen/erniedrigen
 
Ich habe einen MediaPlayer programmiert, der jedoch ruckelnde Wiedergabe hat, wenn ich ein Spiel starte. Der Player ruckelt nicht, wenn ich die Priorität im Tastkmanager auf Hoch stelle. Wie kann ich das automatisch mit meinem Programm machen?

Danke im Vorraus.

Meflin 14. Sep 2006 18:35

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
MSDN-Library durchsuchenSetThreadPriority dürfte dir dabei weiterhelfen...


himitsu 14. Sep 2006 18:52

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Nein, das im TaskManager ist MSDN-Library durchsuchenSetPriorityClass ;)

Der_Ventilator 20. Sep 2006 17:45

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Hm, das ist die Onlinehilfe zu dem Thema:

BOOL SetPriorityClass(
HANDLE hProcess,
DWORD dwPriorityClass
);


Jedenfalls hat
Delphi-Quellcode:
windows.SetPriorityClass(Application.Handle,HIGH_PRIORITY_CLASS);
keine Auswirkung auf die Prioritätsanzeige im Taskmanager. form1.handle hilft auch nichts.

Welches Handle muss ich da verwenden?

brechi 20. Sep 2006 18:01

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
GetCurrentProcess

Der_Ventilator 20. Sep 2006 18:15

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Perfekt, danke.

Go2EITS 20. Sep 2006 18:28

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Die Hilfe zeigt mir getcurrentprocess an, aber welche Uses muss ich einbinden, um darauf zugreifen zu können?

Der_Ventilator 20. Sep 2006 18:45

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
windows.getcurrentprocess funktioniert (habs grad getestet).

Go2EITS 20. Sep 2006 19:01

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Damit habe ich mein Programm "raufgetuned".
//showmessage(inttostr(GetCurrentProcess));
SetPriorityClass(GetCurrentProcess,HIGH_PRIORITY_C LASS);
Danke für die Info!
Grüße Go2EITS

Luckie 20. Sep 2006 22:24

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Normalerweise ist es nicht nötig Windows bei den Prioritäten dazwischen zu fuschen. Und wenn man meint, es wäre doch nötig, dann hat man entweder ein Design-Problem und / oder man hat sich selber ein Performance-Problem mit schlechten Code geschaffen.

Christian Seehase 20. Sep 2006 22:49

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Moin Luckie,

Zitat:

Zitat von Luckie
Normalerweise ist es nicht nötig Windows bei den Prioritäten dazwischen zu fuschen. Und wenn man meint, es wäre doch nötig, dann hat man entweder ein Design-Problem und / oder man hat sich selber ein Performance-Problem mit schlechten Code geschaffen.

Also das sehe ich etwas anders.
Wie will Windows denn entscheiden, wie wichtig mir ein Programm ist?
Standardmässig wird mit Prio "Normal" gestartet.
Wenn ich jetzt aber will, dass ein Programm bevorzugt läuft, da ich das Ergebnis der Verarbeitung schneller haben will, dann kann ich auf dem Rechner entweder nur dieses Programm laufen lassen, oder ich setze die Priorität hoch.
Anderer Fall:
Mir genügt es, wenn das Ergebnis irgendwann mal kommt, der Rest aber nicht so belastet werden soll, setze ich die Priortät runter, zur Not gar auf Idle.

Das liesse sich dann zwar auch mit dem Taskmanager bewerkstelligen, aber für mich spricht nichts dagegen, wenn ein Programm diese Funktionalität von sich aus bietet.

Selbst beim Eingangs genannten Problem muss das nicht ein selbst geschaffenes Problem sein. Ein Programmstart, gerade eines Spieles, kann schon recht resourcenfressend sein (wobei mir allerdings nicht ganz klar ist, wozu man etwas auf einem Mediaplayer laufen lässt, wenn man ein Spiel startet... ;-))

Luckie 20. Sep 2006 22:54

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Ich will es mal anders formulieren: 99% aller Programme kommen mit der normalen Priorität zurecht. Bei einem Prozent kann es sinnvoll sein, die Priorität zu erhöhen. Und dass man als Programmierer gerade diese eine Prozent erwischt, ist sehr unwahrscheinlich, denke ich. Ihc würde er nach Flaschenhälen in meinem Programm gucken, als die Priorität zu erhöhen.

Der_Ventilator 22. Sep 2006 18:10

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Zitat:

Zitat von Christian Seehase
Ein Programmstart, gerade eines Spieles, kann schon recht resourcenfressend sein (wobei mir allerdings nicht ganz klar ist, wozu man etwas auf einem Mediaplayer laufen lässt, wenn man ein Spiel startet... ;-))

Mein Problem war ganz einfach dieses:

Ich höre gerne Musik. Und zwar mit meinem Mediaplayer, programmiert in Delphi unter Hilfenahme der bass.dll. Ich höre immer Musik am Rechner, auch wenn ich ein Spiel spiele. Meistens funktioniert das auch, nur ist Titan Quest so ressourcenhungrig, dass die Wiedergabe hin und wieder stockt (beim Laden z.B.). Durch Verwendung des obigen Codes habe ich das Problem beseitigt.

Und dadurch wird die übrige Rechenleistung eines andernen Programms kaum beeinträchtigt, da mein Programm sowieso nur so viele Ressourcen / Sek braucht, wie es für die Wiedergabe benötigt (die vorzugsweise in Echtzeit ablaufen sollte ^^).

Sunlight7 22. Sep 2006 19:05

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Zitat:

Zitat von Luckie
Ich will es mal anders formulieren: 99% aller Programme kommen mit der normalen Priorität zurecht. Bei einem Prozent kann es sinnvoll sein, die Priorität zu erhöhen.

Ich habe mir ein Programm geschrieben, das die Prioritäten von anderen Programmen ändert, weil es mir am Zeiger ging, das das Fernsehbild der TV Anwendung immer stehn blieb, wenn ein anderes Programm etwas mehr CPU brauchte oder einfach nur gestartet wurde. Der Teletext verpaßt immer die Seiten...
Von MCI braucht man erst gar nicht zu reden.

Nur drei Beispiele von meheren Programmen welche von Experten geschrieben wurden.

Edit: Auch erachte ich es als Sinnvoll die Priorität des Task-Manager zu erhöhen und die des Explorers auf Normal zu setzten. Damit hat man es leichter den Explorer zu killen, wenn der mal wieder blödsinn macht...

Christian Seehase 22. Sep 2006 22:00

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Moin Ventilator,

hättest Du nicht gleich sagen können, dass es um Titan Quest geht? :? ;-)
Dann wäre, zumindest mir, klar gewesen, dass es kaum möglich ist ein anderes Programm parallel laufen zu lassen :mrgreen:
(wenn Du Pech hast schmiert Dir das Spiel sogar beim Start, vermutlich auf Grund von Resourcenmangel, ab, wenn noch etwas anderes vorher gestartet wurde. Ich habe jetzt aber nicht getestet, wieviel, und was da nebenher noch geht, und wovon der erfolgreiche Start abhängt.)

Der_Ventilator 24. Sep 2006 12:00

Re: Priorität des eigenen Programms erhöhen/erniedrigen
 
Titan Quest blockt sogar meine Globalen Hotkeys (keine Ahnung wie die meine Hooks aushebeln können...)

Tipp: Lösch vor dem Start den Videos Ordner, dann startet es innerhalb von 5 Sec anstatt 20 ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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