zoukankan      html  css  js  c++  java
  • 线程优先级

    l       线程优先级

    l       获取当前线程句柄

    l       线程优先级设置

    l       线程优先级变动

    l       线程优先级获取

          

    一、线程优先级(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来进行微调:

        微调范围

     

     

    线程优先级等级

    标志

    优先级值

    1

    idle      (最低)

    THREAD_PRIORITY_IDLE

    如果进程优先级为realtime则调整为16,其它情况为1

    2

    LOWEST 

    THREAD_PRIORITY_LOWEST

    -2(在原有基础上-2

    3

    BELOW   低于标准

    THREAD_PRIORITY_BELOW_NORMAL

    -1(在原有基础上-1

    4

    NORMAL(标准)

    THREAD_PRIORITY_NORMAL

    不变(取进程优先级值)

    5

    ABOVE    高于标准

    THREAD_PRIORITY_ABOVE_NORMAL

    +1(在原有基础上+1

    6

    HIGHEST (高)

    THREAD_PRIORITY_HIGHEST

    +2(在原有基础上+2

    7

    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 ",GetCurrentThreadId(),GetCurrentThreadId());

            break;

             case 1:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);//设置为 较低

                      TRACE("thread=%d,%04x  set priority to THREAD_PRIORITY_LOWEST ",GetCurrentThreadId(),GetCurrentThreadId());

            break;

             case 2:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_BELOW_NORMAL); //设置为 低于标准

                      TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_BELOW_NORMAL ",GetCurrentThreadId(),GetCurrentThreadId());

            break;

             case 3:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);  //设置为 标准

                      TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_NORMAL ",GetCurrentThreadId(),GetCurrentThreadId());

                      break;

             case 4:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);  //设置为 高于标准

                      TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_ABOVE_NORMAL ",GetCurrentThreadId(),GetCurrentThreadId());

                      break;

             case 5:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_HIGHEST);  //设置为 较高

                      TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_HIGHEST ",GetCurrentThreadId(),GetCurrentThreadId());

                      break;

             case 6:

                      r=SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);  //设置为 最高

                      TRACE("thread=%d,%04X  set priority to THREAD_PRIORITY_TIME_CRITICAL ",GetCurrentThreadId(),GetCurrentThreadId());

                      break;

             default:

                      break;

     

             }      

    }

  • 相关阅读:
    _purecall函数
    RaiseFailFastException函数
    windows系统的快速失败机制---fastfail
    悲伤的 C++ throw(…)
    STATUS_STACK_BUFFER_OVERRUN不一定是栈缓冲区溢出
    Windows是如何将64位Ntdll映射到32位进程的---转自简书
    学会springboot多环境配置方案不用5分钟
    优雅的使用springboot集成任务调度
    springboot-使用OpenAPI之后我再也没有写过接口文档
    我是如何做到springboot自动配置原理解析
  • 原文地址:https://www.cnblogs.com/15157737693zsp/p/3843055.html
Copyright © 2011-2022 走看看