我正在开发一个对数据进行排序的程序,我需要将进程设置为优先级31,我认为这是Windows中最高的进程优先级。我做了一些研究,但无法弄清楚如何用C ++做。
答案 0 :(得分:6)
Windows API调用SetPriorityClass允许您更改进程优先级,请参阅MSDN文档中的示例,并使用REALTIME_PRIORITY_CLASS设置最高优先级:
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
警告:如果您要求真正的实时优先级,那么您将获得它。这是一个核武器。操作系统将无情地优先考虑实时优先级线程,远远高于操作系统级别的输入处理,磁盘缓存刷新和其他高优先级时间关键任务。如果您的实时线程消耗了CPU容量,您可以轻松锁定整个系统。这样做时要小心,除非绝对必要,否则请考虑使用高优先级。 More information
答案 1 :(得分:2)
以下功能可以完成这项工作。
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)
答案 2 :(得分:1)
在SetPriorityClass之后(或之前),您必须设置单个线程优先级以实现最大可能性。此外,实时优先级需要另一个安全令牌,因此请务必抓住它(如果可访问)。 SetThreadPriority是SetPriorityClass之后的辅助API。