Announcement

Collapse
No announcement yet.

Priorität des Main-Threads (Application)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Priorität des Main-Threads (Application)

    Hallo,

    Gibt es eine Möglichkeit, dem Task (Main-Thread) einer Delphi-Anwendung eine höhere Priorität zu verpassen als dies standardmäßig gemacht wird? <br>
    Es ist doch richtig daß die Priorität der Threads, die man innerhalb seines Delphi-Programms laufen hat, immer nur relativ zu der Priorität des Main-Treads einstellbar sind.<br>
    Und wenn das geht, was ist dann die maximale Priorität die Windows zulässt?

    Danke Euch vorab, Gruß Achim

  • #2
    Hi

    Jain Die Priorität eines Threads ist immer relativ zur Priorität des besitzendes Prozesses. Mit SetPriorityClass() kann die Priorität eines Prozesses geändert werden, mit SetThreadPriority() die eines Threads. Mit SetThreadPriority(GetCurrentThread, xxx) kann die P. des aktuellen Threads geändert werden. Rufts Du diese Funktion aus dem MainThread auf, GetCurrentThreadID = MainThreadID dann änderst Du die Threadpriority der Anwendung.

    Gruß Hage

    Comment


    • #3
      Hi Hagen,

      muß ich dann setPriorityClass(Application.Handle...) übergeben? Ich hab in der Richtung schon mal rumexperimentiert aber Windows hat das nicht zugelassen wegen fehlender Zugriffsrechte. Ich nehm doch an, daß CreateProcess für die Application von Delphi übernommen wird. Und dabei müssten doch volle Zugriffsrechte erteilt werden. Hilf mir doch bitte mal aus meiner gedanklichen Sackgasse raus

      Gruß Achi

      Comment


      • #4
        Hi

        NEIN, schau in der Hilfe. Application.Handle ist ein Fensterhandle vom Typ hWnd. SetPriorityClass() erwartet ein Handle auf einen Process. Also richtig wäre SetPriorityClass(GetCurrentProcess, xxx);

        Du schmeist da zwei komplett verschiedene Dinge durcheinander. Ein hWnd ist dem User-Interface und ein hProcess dem Kernel zugeordnet.

        Gruß hage

        Comment


        • #5
          Hallo Hagen,

          jetzt hab ich's geschnallt. Danke Dir für Deine Hilfe!

          Gruß Achi

          Comment


          • #6
            * die Basispriorität der eigenen Anwendung lässt sich so einstellen (also mal ganz konkret)
            * es gibt 6 Werte, die in Frage kommen, 2 davon müssen wir leider nachdefinieren, da sie erst am W2K verfügbar sind.

            ----------------- snip

            uses
            windows;

            const
            // not defined in delphi, use only at OS >= W2k
            BELOW_NORMAL_PRIORITY_CLASS = $4000;
            ABOVE_NORMAL_PRIORITY_CLASS = $8000;

            // use other predefined standard values from windows.pas
            // IDLE_PRIORITY_CLASS
            // NORMAL_PRIORITY_CLASS
            // HIGH_PRIORITY_CLASS
            // REALTIME_PRIORITY_CLASS

            --------------- snap

            * Der Win32 API Aufruf lässt sich in einer
            Zeile schreiben:

            SetPriorityClass(GetCurrentProcess,DWORD(BELOW_NOR MAL_PRIORITY_CLASS))

            Comment

            Working...
            X