我正在开发一个数据排序程序,需要将该程序的优先级设置为31,我相信这是Windows中最高的进程优先级。我进行了一些研究,但无法找到如何在C ++中实现它的方法。
我正在开发一个数据排序程序,需要将该程序的优先级设置为31,我相信这是Windows中最高的进程优先级。我进行了一些研究,但无法找到如何在C ++中实现它的方法。
Windows API调用SetPriorityClass允许您更改进程优先级,参考MSDN文档中的示例,使用REALTIME_PRIORITY_CLASS设置最高优先级:
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
注意: 如果你要请求真正的实时优先级,那么你将会得到它。这是一种毁灭性的力量。操作系统会无情地将实时优先级线程置于其他高优先级任务,比如操作系统级别的输入处理、磁盘缓存刷新等等之上。如果你的实时线程耗尽了CPU容量,你很容易让整个系统死机。在进行此操作时请谨慎,除非绝对必要,否则请考虑使用高优先级。 更多信息
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)
PROCESS_ALL_ACCESS
来打开进程呢?毕竟,SetPriorityClass
API 调用只需要 PROCESS_SET_INFORMATION
就足够了。 - IInspectableGetCurrentProcess()
函数出了什么问题?我相信 OP 想要提高自己程序的优先级,而不是别人的。 - Seva Alekseyev在调用 SetPriorityClass 之前(或之后),您必须设置各个线程的优先级以达到最大可能性。此外,对于实时优先级类别,还需要另一个安全令牌,所以请确保获取它(如果可访问)。SetThreadPriority 是 SetPriorityClass 后备的API。