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 时间。

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

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

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

于 2012-01-05T13:02:59.753 回答