2012-01-05 163 views
3

我想改变一个线程的优先级,但我不能得到它的工作。我制作了一个按钮,用于切换低位和高位之间的优先级,当我在工作列表中检查时,优先级会发生变化。但CPU使用率没有改变。我想知道这是否仅仅是因为我没有使用全部的CPU功能或者这是如何。更改线程优先级

我不是问这是不是一个好主意。我在问如何去做。

以下是我如何更改优先级。这是隐藏类代码:

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

混淆线程或进程优先级通常是一个坏主意。 – 2012-01-05 12:47:45

+4

@Nicholas Butler:哦,我明白了,微软提出了线程管理API公开只是为了好玩:) – 2012-01-05 12:51:06

+0

我知道,但我真的想知道如何在运行时正确地更改它 – Sulby 2012-01-05 12:51:55

回答

4

它不工作,我怎么觉得你指望它 - 即与低优先级的进程以某种方式收缩为x%的CPU时间。

具有任何优先级的单线程进程可以在一个内核上消耗100%的CPU时间。

当你有两个进程,一个比另一个具有更高优先级时,它们都会自己消耗100%的CPU时间,同时执行,具有更高优先级的进程将获得所有CPU时间(假设单个内核),而优先权较低的则不会进展。

进程的优先级仅用于确定调度程序将CPU时间片“分发”给进程的顺序。

+0

所以我做了什么工作? – Sulby 2012-01-05 13:07:46

+0

哦......我刚刚意识到我的电脑中有4个内核......这个过程使用了25%。所以与你说的相比,它在一个核心上的使用率达到100%,这与你所说的完全一致。 – Sulby 2012-01-05 13:11:36

+0

是的,没错。如果您希望单个进程能够有效地使用多个CPU,请使用多个线程。 System.Threading.Tasks对于.NET 4.0来说非常棒,它比普通的System.Threading更简单。 – tomfanning 2012-01-05 13:53:24