查看和设置进程优先级

目录

1.查看进程优先级

2.设置进程优先级

2.1 与进程优先级设置相关的API

2.2 优先级等级划分

2.3 示例代码

2.4 查看优先级设置是否生效


1.查看进程优先级

打开任务管理器,点击“详细信息”,选中要查看的exe,然后右键点击,在弹出的菜单中可以看到当前进程的优先级。

 

2.设置进程优先级

每个进程都有相应的优先级,优先级决定它何时运行和占用 CPU 时间。进程(线程)的优先级越高,那么就可以分占相对多的CPU时间片。最终的优先级共分32级,是从 0 到 31 的数值,称为基本优先级别。注意:因为线程才是CPU时间分配的最小单位,所以部分书上也叫线程优先等级。

2.1 与进程优先级设置相关的API

  • GetCurrentProcess:获取当前进程句柄
  • CreateProcess:创建进程,创建进程时可以直接设置进程优先级
  • SetPriorityClass:设置进程优先级,创建进程后可以调用此函数修改优先级
  • GetPriorityClass:获取进程优先级
  • SetProcessPriorityBoost:设置激活或停用系统自动调整进程优先级的功能
  • GetProcessPriorityBoost:获取是否激活了系统自动调整进程优先级的功能

2.2 优先级等级划分

标识优先级数值
IDLE_PRIORITY_CLASS低优先级0x00000040
BELOW_NORMAL_PRIORITY_CLASS低于标准优先级0x00004000
NORMAL_PRIORITY_CLASS标准优先级0x00000020
ABOVE_NORMAL_PRIORITY_CLASS 高于标准优先级0x00008000
HIGH_PRIORITY_CLASS高优先级0x00000080
REALTIME_PRIORITY_CLASS实时(最高优先级)0x00000100

2.3 示例代码

#include "QtWidgetsApplication5.h"
#include <QtWidgets/QApplication>
#include <windows.h>

int main(int argc, char *argv[])
{
    //设置进程优先级为"实时优先级"
    SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);

    //阻止系统自动调整进程优先级
    SetProcessPriorityBoost(GetCurrentProcess(), true);

    QApplication a(argc, argv);
    QtWidgetsApplication5 w;
    w.show();
    return a.exec();
}

 

2.4 查看优先级设置是否生效

 

在Windows系统上,调整子进程优先级通常需要使用`CreateProcessWithPriorityClass`函数而非直接修改进程优先级。这个函数允许你在创建新进程时指定其优先级。然而,注意并非所有的操作系统特性都能跨平台地工作,因此下面的代码将以Windows平台为基础,并假设你有权限调整进程优先级: ```python from win32api import CreateProcessWithPriorityClass import os import time # 定义进程优先级 PRIO_NORMAL = 0x0020 PRIO_HIGH = 0x0040 # 子进程函数 def sleeper(name, seconds, priority): print(f"子进程 ID #{os.getpid()}") print(f"{name} 将睡眠 {seconds} 秒") time.sleep(seconds) print(u"子进程 %s 结束." % os.getpid()) def create_child_process_with_priority(): child_id = os.getpid() # 创建子进程,同时指定优先级 process_info = { 'dwDesiredAccess': 0x000F0000, # PROCESS_CREATE_PROCESS, 'bInheritHandles': False, 'lpProcessInformation': None, 'hThread': None, 'dwCreationFlags': CREATE_NEW_PROCESS_GROUP | CREATE_SUSPENDED, # 新进程独立组,挂起以便立即调整优先级 'wShowWindow': SW_HIDE, # 隐藏窗口 'lpDesktop': None, 'hStdInput': None, 'hStdOutput': None, 'hStdError': None, 'cbProcessInfo': 0, 'lpProcessAttributes': None, 'lpThreadAttributes': None, 'dwProcessGroupID': 0, 'dwSessionID': 0, 'lpCommandLine': f'start /wait python.exe -c "sleeper(\'bob\', 5, PRIO_HIGH)"', 'lpProcessName': None, 'dwCreationFlagsEx': 0, 'priority_class': PRIO_HIGH, # 设置优先级 } try: process = CreateProcessWithPriorityClass(None, **process_info) print(f"创建子进程进程ID: {child_id}, 子进程ID: {process.pid}") except Exception as e: print(f"无法设置优先级,错误信息: {e}") create_child_process_with_priority() ``` 这段代码首先从`win32api`模块导入`CreateProcessWithPriorityClass`,然后在`create_child_process_with_priority`函数里尝试创建子进程,并将其优先级设置为`PRIO_HIGH`(高)。`dwCreationFlags`参数包含`CREATE_NEW_PROCESS_GROUP`标志,使得子进程可以作为一个独立的进程组,便于后续操作。 请注意,不是所有操作系统的API都支持优先级调整,而且这可能会受限于用户的权限。此外,由于`CREATE_SUSPENDED`标志会使进程在启动时就暂停,所以在实际应用中你可能需要先创建进程,再调整优先级,然后再恢复执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen Roson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值