2012-01-05 168 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