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

スレッドやプロセスの優先順位を混乱させるのは、一般的には悪い考えです。 –

+4

@Nicholas Butler:マイクロソフトでスレッド管理APIを公開しました。 –

+0

実行時に正しく変更する方法を知りたいのですが、 – Sulby

答えて

4

それは私があなたにそれを期待してどのように考えるかは動作しません - すなわち、優先度の低いプロセスが何らかの形でのx%のCPU時間に絞られていること。

任意のプライオリティを持つシングルスレッドプロセスは、1つのコアでCPU時間を100%消費する可能性があります。

2つのプロセスがある場合、どちらも優先度が高く、同時に100%CPU時間を消費し、同時に実行すると、優先度の高いものがすべてのCPU時間を取得します(シングルコア)、優先度の低いものはまったく進まない。

スケジューラがCPUタイムスライスをプロセスに「引き渡す」順序を決定するために、プロセスの優先順位が使用されます。

+0

私は何をしていますか? – Sulby

+0

ああ...私はちょうど私のコンピュータに4つのコアを持っていることに気付きました....プロセスは25%を使用しています。あなたが言ったことと比較すると、あなたが言ったことはexeactlyだった1つのコアで100%を使用しています。 – Sulby

+0

はい、そうです。単一のプロセスが複数のCPUを効果的に使用できるようにするには、複数のスレッドを使用します。 System.Threading.Tasksは.NET 4.0でこれに最適ですが、従来のSystem.Threadingよりもはるかに単純なものになります。 – tomfanning

関連する問題