Как установить приоритет процесса в C ++ - PullRequest
4 голосов
/ 07 марта 2011

Я работаю над программой для сортировки данных, и мне нужно установить для процесса приоритет 31, который, я считаю, является наивысшим приоритетом процесса в Windows. Я провел некоторое исследование, но не могу понять, как это сделать в C ++.

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Вызов Windows API SetPriorityClass позволяет изменить приоритет процесса, см. Пример в документации MSDN и использовать REALTIME_PRIORITY_CLASS, чтобы установить самый высокий приоритет:

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)

Осторожно : если вы запрашиваете истинный приоритет в реальном времени, вы получите его.Это ядерное оружие.ОС будет беспощадно расставлять приоритеты потоку приоритета в реальном времени, намного выше, чем даже обработка ввода на уровне ОС, очистка дискового кеша и другие высокоприоритетные задачи, критичные ко времени.Вы можете легко заблокировать всю вашу систему, если поток (ы) в реальном времени истощает ваш процессор.Будьте осторожны при этом, и, если в этом нет крайней необходимости, рассмотрите возможность использования высокоприоритетных. Дополнительная информация

2 голосов
/ 11 января 2018

Следующая функция сделает работу.

void SetProcessProirity(LPWSTR ProcessName, int Priority)
{
    PROCESSENTRY32 proc32;
    HANDLE hSnap;
    if (hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0));
    if (hSnap == INVALID_HANDLE_VALUE)
    {

    }
    else
    {
        proc32.dwSize = sizeof(PROCESSENTRY32);
        while ((Process32Next(hSnap, &proc32)) == TRUE)
        {
            if (_wcsicmp(proc32.szExeFile, ProcessName) == 0)
            {
                HANDLE h = OpenProcess(PROCESS_SET_INFORMATION ,TRUE, proc32.th32ProcessID);
                SetPriorityClass(h, Priority);
                CloseHandle(h);
            }
        }
        CloseHandle(hSnap);
    }
}

Например, чтобы установить приоритет Excel ниже обычного, используйте:

SetProcessProirity(L"excel.exe",BELOW_NORMAL_PRIORITY_CLASS)
1 голос
/ 08 марта 2011

После (или до) SetPriorityClass необходимо установить приоритет отдельного потока для достижения максимально возможного.Кроме того, для класса приоритета в реальном времени требуется еще один токен безопасности, поэтому обязательно захватите его (если он доступен).SetThreadPriority является вторичным API после SetPriorityClass.

...