Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Priorität einer Anwendung

  Alt 8. Mär 2005, 11:33
Zitat von Sprint:
Zitat von Luckie:
Da ein Prozess keinen Code ausführt, kann man dessen Priorität auch nicht ändern, sondern man kann nur die Priorität der Threads verändern.
Selbstverständlich kann man die Priorität eines Prozess ändern.
ja war etwas blöd ausgedrückt. Die Priorität eies Prozesses ergibt sich aus den Prioritäten von dessen Threads. Ändere ich die Basispriorität der Threads innerhalb des Prozesses, dann wird natürlich auch die Priorität des Prozesses geändert. Und mit MSDN-Library durchsuchenSetPriorityClass wird eben die Basisprioritöt der Threads geändert.

Zitat von runger:
ich hatte gefragt wie man zur Laufzeit die Priorität des eigenen laufenden Prozesses ändern kann.
Und genau das haben dir alle beantwortet.

Zitat:
Das heisst: jede Sekunde wird nachgeschaut ob im Tagesfahrplan ein Eintrag mit der aktuellen Uhrzeit steht.
Autsch. Das würde ich nicht mit einem Timer lösen. Wenn ich eine Einfluss auf die andere Anwendung hätte, dann würde ich immer eine Nachricht verschicken und mit der anderen Anwendung eben empfangen und immer wenn eine ankommt entsprechend reagieren.
Oder ich würde einen separaten Thread nehmen (Es würde mich ziemlich interessieren, warum das bei dir nicht geht.), denn ich immer mit Sleep(1000) lahmlege. Aber einen Timer würde ich auf keinen Fall nehmen.

Windows ist nachrichtenbasierend und kann so mit nie ein Echtzeitsystem sein. Selbst wenn du die Priorität deines Prozesses hochsetzt.

SetPriorityClass(GetCurrentProcess,DWORD(THREAD_PRIORITY_IDLE)); Der Cast nach DWORD ist überflüssig, THREAD_PRIORITY_IDLE ist bereits ein DWORD. Aber kannst du mir mal erklären, was du da machst? Die Prioritätsklassen für die API Funktion sind:
Zitat:
  • ABOVE_NORMAL_PRIORITY_CLASS
    Process that has priority above NORMAL_PRIORITY_CLASS but below HIGH_PRIORITY_CLASS.
    Windows NT and Windows Me/98/95: This value is not supported.
  • BELOW_NORMAL_PRIORITY_CLASS
    Process that has priority above IDLE_PRIORITY_CLASS but below NORMAL_PRIORITY_CLASS.
    Windows NT and Windows Me/98/95: This value is not supported.
  • HIGH_PRIORITY_CLASS
    Process that performs time-critical tasks that must be executed immediately. The threads of the process preempt the threads of normal or idle priority class processes. An example is the Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class application can use nearly all available CPU time.
  • IDLE_PRIORITY_CLASS
    Process whose threads run only when the system is idle. The threads of the process are preempted by the threads of any process running in a higher priority class. An example is a screen saver. The idle-priority class is inherited by child processes.
  • NORMAL_PRIORITY_CLASS
    Process with no special scheduling needs.
  • REALTIME_PRIORITY_CLASS
    Process that has the highest possible priority. The threads of the process preempt the threads of all other processes, including operating system processes performing important tasks. For example, a real-time process that executes for more than a very brief interval can cause disk caches not to flush or cause the mouse to be unresponsive.
Die Konstanten, die du angegeben hast, gilt für MSDN-Library durchsuchenSetThreadPriority. Hast du mal im Taskmanger geguckt mit was für einer Priorität dein Prozess jetzt läuft? Außerdem dachte ich, du wolltest die Priorität hoch setzten. Jetzt hast du aber genau das Gegenteil gemacht. Dein Thread / Prozess bekommt jetzt nur noch Rechenzeit, wenn im System "nicht los ist". Bzw:
Zitat von PSDK:
For IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, and HIGH_PRIORITY_CLASS processes, the system dynamically boosts a thread's base priority level when events occur that are important to the thread.
Ich würde dir dazu mal empfehlen, mein Thread-Tutorial durch zu lesen.

Zitat von runger:
Bemerkung: Mir ist schon öfter aufgefallen, dass du sehr persönliche (und auch verletzende)Antworten verteilst. Lass das bitte.
Ach? Ich zitiere dich mal: "Red' ich chinesisch...". Im Gegensatz dazu war mein Beitrag ohne jegliche Gefühlsäußerung. Das einzige, was ich geamcht habe, ich habe gesagt,
Zitat:
Du redest nicht chinesisch nur verstehst du die Antworten nicht.
Weil hättest du die Antworten verstanden, dann wäre dieser Satz von dir überflüssig gewesen.
Michael
Ein Teil meines Codes würde euch verunsichern.