更改线程优先级

时间:2012-01-05 12:44:19

标签: c# wpf multithreading thread-priority

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

1 个答案:

答案 0 :(得分:4)

我认为你的预期不起作用 - 即低优先级的进程以某种方式限制为x%CPU时间。

任何优先级的单线程进程都会占用一个核心100%的CPU时间。

当你有两个进程,一个优先级高于另一个进程时,它们自己消耗100%的CPU时间,同时执行,优先级较高的进程将获得所有CPU时间(假设单个核心)优先级较低的人根本不会进步。

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