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)
        {
        }
    }
4

1 に答える 1

4

あなたが期待するように動作しません。つまり、優先度の低いプロセスが何らかの理由で x% の CPU 時間に抑制されます。

任意の優先度のシングルスレッド プロセスは、1 つのコアで 100% の CPU 時間を消費する可能性があります。

2 つのプロセスがあり、一方が他方よりも優先度が高く、両方が同時に実行されて 100% の CPU 時間を消費する場合、優先度の高い方がすべての CPU 時間を取得し (単一コアを想定)、もう 1 つのプロセスが CPU 時間を取得します。優先度の低いものはまったく進行しません。

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

于 2012-01-05T13:02:59.753 に答える