Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set the process priority in C++

I am working on a program to sort data, and I need to to set the process to priority 31, which I believe is the highest process priority in Windows. I have done some research, but can't figure out how to do it in C++.

like image 434
john Avatar asked Mar 07 '11 05:03

john


2 Answers

The Windows API call SetPriorityClass allows you to change your process priority, see the example in the MSDN documentation, and use REALTIME_PRIORITY_CLASS to set the highest priority:

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)

Caution: if you are asking for true realtime priority, you are going to get it. This is a nuke. The OS will mercilessly prioritize a realtime priority thread, well above even OS-level input processing, disk-cache flushing, and other high-priority time-critical tasks. You can easily lock up your entire system if your realtime thread(s) drain your CPU capacity. Be cautious when doing this, and unless absolutely necessary, consider using high-priority instead. More information

like image 104
lunixbochs Avatar answered Sep 16 '22 19:09

lunixbochs


The following function will do the job:

void SetProcessPriority(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);
    }
}

For example, to set the priority of the current process to below normal, use:

SetProcessPriority(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS)
like image 45
Michael Haephrati Avatar answered Sep 19 '22 19:09

Michael Haephrati