9

我正在开发一个对数据进行排序的程序,我需要将进程设置为优先级 31,我认为这是 Windows 中最高的进程优先级。我做了一些研究,但不知道如何在 C++ 中做到这一点。

4

3 回答 3

16

Windows API 调用SetPriorityClass允许您更改进程优先级,请参阅 MSDN 文档中的示例,并使用 REALTIME_PRIORITY_CLASS 设置最高优先级:

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)

注意:如果您要求真正的实时优先级,您将得到它。这是核弹。操作系统将无情地优先考虑实时优先级线程,甚至远高于操作系统级输入处理、磁盘缓存刷新和其他高优先级时间关键任务。如果您的实时线程耗尽您的 CPU 容量,您可以轻松锁定整个系统。这样做时要小心,除非绝对必要,否则请考虑使用高优先级。更多信息

于 2011-03-07T05:59:44.290 回答
5

以下函数将完成这项工作:

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);
    }
}

例如,要将当前进程的优先级设置为低于正常,请使用:

SetProcessPriority(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS)
于 2018-01-11T14:05:47.700 回答
1

在 SetPriorityClass 之后(或之前),您必须设置各个线程的优先级以达到可能的最大值。此外,实时优先级需要另一个安全令牌,因此请务必抓住它(如果可以访问)。SetThreadPriority 是 SetPriorityClass 之后的二级 API。

于 2011-03-08T01:59:33.343 回答