2012-01-05 5 views
3

J'essaie de changer la priorité d'un thread mais je n'arrive pas à le faire fonctionner. J'ai fait un bouton qui bascule la priorité entre le bas et le haut et quand je vérifie ceci dans la joblist la priorité est changée. Mais l'utilisation du processeur n'est pas modifiée. Je me demande si c'est juste parce que je n'utilise pas toute la puissance du processeur ou comment cela peut être.Modifier la priorité des threads

Je ne demande pas si c'est une bonne idée. Je demande comment le faire.

Voici comment je change la priorité. Voici le code derrière classe:

private Thread tr; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     tr = new Thread(new ThreadStart(infiniteLoop)); 
     tr.Start(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     if (Process.GetCurrentProcess().PriorityClass == ProcessPriorityClass.High) 
     { 
      Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle; 
      tr.Priority = ThreadPriority.Lowest; 
      description.Text = "Idle"; 
     } 

     else 
     { 
      Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; 
      tr.Priority = ThreadPriority.Highest; 
      description.Text = "High"; 
     } 
    } 

    private void infiniteLoop() 
    { 
     while (true) 
     { 
     } 
    } 
+2

Il est généralement une mauvaise idée de jouer avec les priorités de thread ou de processus. –

+4

@Nicholas Butler: Oh, je vois, Microsoft a rendu public l'API de gestion de threads juste pour le plaisir :) –

+0

Je sais mais je veux vraiment savoir comment le changer correctement à l'exécution – Sulby

Répondre

4

Il ne fonctionne pas comment je pense que vous vous attendez à - dire qu'un processus à faible priorité est étranglé en quelque sorte à x% du temps CPU. Un processus monothread avec n'importe quelle priorité peut consommer 100% du temps CPU sur un seul cœur.

Lorsque vous avez deux processus, l'un avec une priorité plus élevée que l'autre, qui consomment tous les deux 100% du temps CPU, s'exécutant simultanément, celui avec une priorité plus élevée recevra tout le temps CPU (en supposant un seul cœur) et celui avec une priorité inférieure ne progressera pas du tout.

La priorité d'un processus est simplement utilisée pour déterminer l'ordre dans lequel le planificateur «distribue» des tranches de temps de processeur aux processus.

+0

Alors, qu'est-ce que j'ai fait, c'est de travailler? – Sulby

+0

oh ... je viens de réaliser que j'ai 4 cœurs dans mon ordinateur .... le processus utilise 25%. Donc, comparé à ce que vous dites, il utilise 100% sur un noyau qui était exactement ce que vous avez dit. – Sulby

+0

Oui, c'est vrai. Si vous souhaitez qu'un seul processus puisse utiliser efficacement plusieurs processeurs, utilisez plusieurs threads. System.Threading.Tasks est génial pour cela dans .NET 4.0, rend les choses beaucoup plus simples que System.Threading. – tomfanning

Questions connexes