更改线程优先级



我试图更改线程的优先级,但无法使其工作。我做了一个按钮,可以在低和高之间切换优先级,当我在作业列表中检查时,优先级会发生变化。但是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)
        {
        }
    }

它并不像我认为的那样工作——也就是说,一个优先级低的进程在某种程度上被限制为x%CPU时间。

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

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

进程的优先级只用于确定调度器将CPU时间片"分配"给进程的顺序。

最新更新