2012-01-05 7 views
3

Я пытаюсь изменить приоритет потока, но я не могу заставить его работать. Я сделал кнопку, которая переключает приоритет между низким и высоким, и когда я проверяю это в списке заданий, приоритет изменяется. Но использование ЦП не изменилось. Интересно, это просто потому, что я не использую полную мощность процессора и как это может быть.Изменить приоритет нити

Я не прошу, если это хорошая идея. Я спрашиваю, как это сделать.

Вот как я изменяю приоритет. Это код позади класса:

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

Как правило, это плохая идея, связанная с приоритетами потоков или процессов. –

+4

@ Николас Батлер: О, я вижу, Microsoft создала API управления потоками публично просто для удовольствия :) –

+0

Я знаю, но я действительно хочу знать, как правильно его изменить во время выполнения – Sulby

ответ

4

Это не работает, как я думаю, что вы ожидаете, что - то, что процесс с низким приоритетом как-то задушил на х% процессорного времени.

Однопоточный процесс с любым приоритетом может потреблять 100% процессорного времени на одном ядре.

Если у вас есть два процесса, один из которых имеет более высокий приоритет, чем другой, каждый из них будет потреблять 100% процессорного времени самостоятельно, одновременно выполняя одно с более высоким приоритетом, получает все процессорное время (при условии, что одно ядро), и тот, у кого более низкий приоритет, не будет развиваться вообще.

Приоритет процесса просто используется для определения порядка, в котором планировщик «раздаст» куски времени процессора процессам.

+0

Итак, что я сделал, работает? – Sulby

+0

oh ... Я просто понял, что у меня 4 ядра на моем компьютере .... процесс использует 25%. Таким образом, по сравнению с тем, что вы говорите, он использует 100% на одном ядре, что было точно, что вы сказали. – Sulby

+0

Да, это так. Если вы хотите, чтобы один процесс мог эффективно использовать несколько процессоров, используйте несколько потоков. System.Threading.Tasks отлично подходит для этого в .NET 4.0, делает вещи намного проще, чем простые старые System.Threading. – tomfanning

Смежные вопросы