当前位置: 首页 > news >正文

线程优先级

知识点:
    线程优先级
    获取当前线程句柄
    线程优先级设置
    线程优先级变动
    线程优先级获取
      
一、线程优先级(Thread priority )
    简单的说就是(线程)的优先级越高,那么就可以分占相对多的CPU时间片。   每个进程都有相应的优先级,优先级决定它何时运行和占用 CPU 时间。最终的优先级共分32级,是从 0 到 31 的数值,称为基本优先级别。
          

进程优先级 priority class    标志    优先级值
idle     (低)    IDLE_PRIORITY_CLASS    4
Below     低于标准    BELOW_NORMAL_PRIORITY_CLASS    此值在2000以下系统不支持
normal  (标准)    NORMAL_PRIORITY_CLASS    9(前台) 或 7(后台)
Above     高于标准    ABOVE_NORMAL_PRIORITY_CLASS    此值在2000以下系统不支持
high      (高)    HIGH_PRIORITY_CLASS    13
realtime (实时)    REALTIME_PRIORITY_CLASS    24
 
一个线程创建的时候,会继承进程的优先级等级。另外线程优先级可以用SetThreadPriority来进行微调:
    微调范围
    线程优先级等级    标志    优先级值
   idle      (最低)    THREAD_PRIORITY_IDLE    如果进程优先级为realtime则调整为16,其它情况为1
   LOWEST  低    THREAD_PRIORITY_LOWEST    -2(在原有基础上-2)
   BELOW   低于标准    THREAD_PRIORITY_BELOW_NORMAL    -1(在原有基础上-1)
   NORMAL(标准)    THREAD_PRIORITY_NORMAL    不变(取进程优先级值)
   ABOVE    高于标准    THREAD_PRIORITY_ABOVE_NORMAL    +1(在原有基础上+1)
   HIGHEST (高)    THREAD_PRIORITY_HIGHEST    +2(在原有基础上+2)
   CRITICAL(最高)    THREAD_PRIORITY_TIME_CRITICAL    如果进程优先级为realtime则调整为31,其它情况为15
 
二、获取当前线程句柄
HANDLE GetCurrentThread(VOID)
//返回当前进句柄
DWORD GetCurrentThreadId(VOID)
//返回当前进程ID值
   1、其它线程函数
BOOL SetThreadPriority 设置一个线程的优先级别
int GetThreadPriority    返回一个线程的 优先级别 
SetThreadPriorityBoost    设置线程是否禁用动态调整优先级功能。
GetThreadPriorityBoost    获取线程是否禁用了优先级微调功能。
三、线程优先级的设置
 BOOL SetThreadPriority
(
 
 HANDLE hThread,// 线程句柄   handle to the thread
 
 int nPriority      // 要设置线程优先级别thread priority level
);

void CDialog_PROCESS::OnBnClickedRadio7()
{
    // TODO: 在此添加控件通知处理程序代码
    BOOL r=0;
    UpdateData(true);
    switch (m_radio_thread_selNum)
    {
    case 0:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_IDLE); //设置为 最低
        TRACE("thread=%d,%04x  set priority to THREAD_PRIORITY_IDLE \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 1:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);//设置为 较低
        TRACE("thread=%d,%04x  set priority to THREAD_PRIORITY_LOWEST \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 2:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_BELOW_NORMAL); //设置为 低于标准
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_BELOW_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 3:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);  //设置为 标准
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 4:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);  //设置为 高于标准
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_ABOVE_NORMAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 5:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);  //设置为 较高
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_HIGHEST \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    case 6:
        r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);  //设置为 最高
        TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_TIME_CRITICAL \n",GetCurrentThreadId(),GetCurrentThreadId());
        break;
    default:
        break;
    }   
}

相关文章:

  • Django之template操作
  • 串口通信Rs232和TTL
  • C++:堆与栈区别
  • mysql的操作
  • matlab 绘图设置 (全)
  • 红包的原理
  • mathtype 修改公式 章节号 和编号
  • 论文阅读:Factorized Recurrent Neural Architectures for Longer Range Dependence
  • 论文 :审稿意见
  • 吴伯凡-认知方法论-原始舒适区=0认知
  • Django之Form操作
  • 吴伯凡-认知方法论-你眼前的世界是真实的还是虚假的
  • 吴伯凡-认知方法论-给思维一个支点
  • 中国地图分区域
  • 吴伯凡-认知方法论-为什么说“盲维”是认知升级的重要概念
  • ----------
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 2017-08-04 前端日报
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • AWS实战 - 利用IAM对S3做访问控制
  • Debian下无root权限使用Python访问Oracle
  • ERLANG 网工修炼笔记 ---- UDP
  • HTML-表单
  • JavaScript标准库系列——Math对象和Date对象(二)
  • js数组之filter
  • Leetcode 27 Remove Element
  • npx命令介绍
  • 百度小程序遇到的问题
  • 程序员最讨厌的9句话,你可有补充?
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 机器学习中为什么要做归一化normalization
  • 检测对象或数组
  • 聚簇索引和非聚簇索引
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 那些被忽略的 JavaScript 数组方法细节
  • 批量截取pdf文件
  • 详解移动APP与web APP的区别
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 延迟脚本的方式
  • 因为阿里,他们成了“杭漂”
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 最近的计划
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • postgresql行列转换函数
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (2)(2.10) LTM telemetry
  • (2015)JS ES6 必知的十个 特性
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm跨平台教学系统 毕业设计 280843