Priorität des Mainthreads festlegen



  • Eine Anwendung soll (warum auch immer) mit einer etwas höheren Priorität wie NORMAL laufen. Dazu kann man ja das Programm mit "start /abovenormal App-Name" über die Kommandozeile starten oder manuell im Taskmanager diese Einstellung vornmehmen.
    Jetzt die Frage: ist es beim Anlegen des Programmthreads bereits innerhalb des Programmes möglich, diese Priorität festzulegen?
    Zweite Frage: Wenn das Programm aus mehreren Threads besteht (1 GUI-Thread und 2-3 Worker-Threads), wie sieht dann deren Prioritätsverteilung aus, wenn diese nochmal höher gesetzt wird wie THREAD_PRIORITY_NORMAL?



  • AndyDD schrieb:

    Jetzt die Frage: ist es beim Anlegen des Programmthreads bereits innerhalb des Programmes möglich, diese Priorität festzulegen?

    Klar - mit SetThreadPriority() kannst du die Priorität jedes Threads ändern, inklusive deinen eigenen. (den dafür nötigen Thread-Handle bekommst du mit GetCurrentThread())

    Zweite Frage: Wenn das Programm aus mehreren Threads besteht (1 GUI-Thread und 2-3 Worker-Threads), wie sieht dann deren Prioritätsverteilung aus, wenn diese nochmal höher gesetzt wird wie THREAD_PRIORITY_NORMAL?

    Die Prioritätsverteilung sieht genau so aus, wie du das eingestellt hast.



  • Und wo ruft man das auf? Der Thread muss doch schon laufen wenn ich das richtig verstanden habe. Bin bisher immer davon ausgegangen das ein Thread nur mit der Priorität läuft mit der er gestartet wurde. Das man das zur Laufzeit ändern kann ist mir neu.



  • AndyDD schrieb:

    Und wo ruft man das auf? Der Thread muss doch schon laufen wenn ich das richtig verstanden habe.

    Irgendwo am Anfang der Arbeit.

    Bin bisher immer davon ausgegangen das ein Thread nur mit der Priorität läuft mit der er gestartet wurde. Das man das zur Laufzeit ändern kann ist mir neu.

    Jetzt weißt du's - du kannst die Priorität eines laufenden Threads jederzeit anpassen, wenn du der Meinung bist, daß er zu viel oder zu wenig Systemzeit abbekommt (oder meinst du, die Funktion "SetThreadPriority()" gibt's zum Spaß?)


  • Mod

    Wieso muss der Thread schon laufen?
    AfxBeginThread hat doch einen Parameter für dioe Prio!

    Was meinst Du mit der zweiten Frage?

    Was willst Du damit eigentlich erreichen? Dass Dein Programm schneller läuft? Das kanst Du vergessen. Du machst IMHO nur das System schlechter Bedienbar auf dem Dein Programm läuft.

    Sofern Dein Programm/Thread mit hoher Prio die ganze Zeit läuft und was zu tun hat wird das System extrem schwerfällig. Oft hat es einen negativen Effekt?



  • CStoll schrieb:

    Jetzt weißt du's - du kannst die Priorität eines laufenden Threads jederzeit anpassen, wenn du der Meinung bist, daß er zu viel oder zu wenig Systemzeit abbekommt (oder meinst du, die Funktion "SetThreadPriority()" gibt's zum Spaß?)

    Die kannte ich noch nicht. Hab das auch bisher selten gebraucht, da meine Threads immer als normal gelaufen sind.

    Martin Richter schrieb:

    Wieso muss der Thread schon laufen?
    AfxBeginThread hat doch einen Parameter für dioe Prio!

    Was meinst Du mit der zweiten Frage?

    Was willst Du damit eigentlich erreichen? Dass Dein Programm schneller läuft? Das kanst Du vergessen. Du machst IMHO nur das System schlechter Bedienbar auf dem Dein Programm läuft.

    Sofern Dein Programm/Thread mit hoher Prio die ganze Zeit läuft und was zu tun hat wird das System extrem schwerfällig. Oft hat es einen negativen Effekt?

    Ein Kollege hatte mich das gerfagt. Deshalb sagte ich auch "warum auch immer". Sicher wird es schlechter bedienbar, u.U. bremst man ja sogar den Taskmanager aus. Das das Programm nicht schneller läuft dürfte klar sein, da man sogar dadurch Performanceeinbußen hinnehmen muss. Die zweite Frage bezog sich auf das Gesamtsystem. Nehmen wir an wir haben zwei indentische Programme laufen, deren Hauptpriorität normal und die Priorität des Workerthreads THREAD_PRIORITY_ABOVE_NORMAL ist. Wenn man jetzt bei einem dieser Programme den Mainthread in der Priorität anhebt, was passiert dann mit dem Workerthread?


Anmelden zum Antworten