mfc 线程的优先级

知识点:
?    线程优先级
?    获取当前线程句柄
?    线程优先级设置
?    线程优先级变动
?    线程优先级获取

一、线程优先级(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 \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;

    }
}
时间: 2024-10-06 16:45:16

mfc 线程的优先级的相关文章

线程的优先级

------------siwuxie095 优先级顺序设置: 如果什么都不设置,则默认为 5 线程的优先级可以影响线程的执行顺序,但不是绝对 代码: package com.siwuxie095.thread; class MyRun implements Runnable{ public void run() { for (int i = 0; i < 5; i++) { try { //每打印一次,休眠1秒 Thread.sleep(1000); //获取当前线程名称 System.out

三、java多线程核心技术(笔记)——线程的优先级

概论: 在操作系统中,线程可以划分优先级,优先级高的获得的CPU资源较多,也就是CPU优先执行优先级较高的线程.在JAVA中线程的优先级 分1~~10个10个等级.大于或者小于会报异常. 一.线程优先级具有继承性 A 线程启动 B线程,则线程B的优先级与A的是一样的.. public class MyThread1 extends Thread { @Override public void run() { System.out.println("MyThread1 run priority=&

java 22 - 6 多线程之线程调度和设置线程的优先级

线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调度模型: 分时调度模型 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片 抢占式调度模型 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些. Java使用的是抢占式调度模型. 既然线程设有设置优先级,

java多线程之线程的优先级

在操作系统中,线程可以划分优先级,优先级较高的线程得到CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务(其实并不是这样). 在java中,线程的优先级用setPriority()方法就行,线程的优先级分为1-10这10个等级,如果小于1或大于10,则抛出异常throw new IllegalArgumentException(),默认是5. public class MyThread1 extends Thread { @Override public void run() {

JAVA中的多线程(八):线程的优先级和yield方法

优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runnable 2 { 3 public void run() 4 { 5 for(int x = 0; x < 70; x++) 6 { 7 System.out.println(Thread.currentThread().toString()+"..."+x); 8 Thread.yield(); 9 } 10 } 11 } 12 13 c

Java 并发 线程的优先级

Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于某些原因不执行的时候,低优先级的线程才可能被执行 2.两个优先级相同的线程同时等待执行时,那么运行系统会以round-robin的方式选择一个线程执行(即轮询调度,以该算法所定的)(Java的优先级策略是抢占式调度!) 3.被选中的线程可因为一下原因退出,而给其他线程执行的机会: 1) 一个更高优先

Java多线程编程(三)线程的优先级、同步与死锁

线程的优先级: 线程的优先级分为三种,分别是: 1-MIN_PRIORITY 10-MAX_PRIORITY 5-NORM_PRIORITY 如果什么都不设置默认值是5 线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响.在默认状态下(比如说主线程)它的默认值是5 具体代码演示: package com.yeqc.thread; class ThRun implements Runnable{ @Override public void run() { for(int i

MFC 线程创建方式

MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC创建UI线程,使用工作线程的方式. 1.UI线程,继承CWinThread类  1 class CAddDeviceApp : public CWinThread 2 { 3     DECLARE_DYNCREATE(CAddDeviceApp) 4 protected: 5     CAddDe

Java中的线程的优先级

Java 中线程优先级简介: 1. Java 提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程. 按照线程的优先级决定应该调度哪个线程来执行. 2. 线程的优先级用数字表示, 范围从 1 到 10, 一个线程的缺省优先级是 5. Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRIORITY = 5; 3. 使用下述方法获得.或设置线程对象的优先级. int getPriority(); void setP