关于CWinApp::OnIdle的解释

2023-05-16

CWinApp::OnIdle

virtual BOOL OnIdle( LONG lCount );

返回值:如果要接收更多的空闲处理时间,则返回非零值;如果不需要更多的空闲时间则返回0。

参数:

lCount 该参数是一个计数值,当应用程序的消息队列为空,OnIdle函数被调用时,该计数值就增加1。每当一条新消息被处理时,该计数值就被复位为0。你可以使用lCount参数来确定应用程序不处理消息时空闲时间的相对长度。


说明:
如果要执行空闲时处理,则重载这个成员函数。当应用程序的消息队列为空时,OnIdle就在缺省的消息循环中被调用。你可以用重载函数来调用自己的后台空闲处理任务。
OnIdle应返回0以表明不需要更多的空闲处理时间。当消息队列为空时,OnIdle每被调用一次lCount参数就增加,而每处理一条新消息lCount就被复位为0。你可以根据这个计数值调用不同的空闲处理例程。
下面总结了空闲循环处理:

1. 如果微软基础类库中的消息循环检查消息队列并发现没有未被处理的消息,它就为应用程序对象调用OnIdle函数,并将lCount参数设为0。
2. OnIdle执行一些处理,然后返回一个非零值,表示它还需要被调用,以进行进一步处理。
3. 消息循环再次检查消息队列。如果没有未处理的消息,则再次调用OnIdle,增加lCount参数。
4. 最后,OnIdle结束所有的空闲任务并返回0。这就告诉消息循环停止调用OnIdle直到在消息队列中接收到下一条消息为止,在那时,空闲循环将重新启动,而参数被设为0。

因为只有在OnIdle返回之后应用程序才能处理用户输入,因此在OnIdle中不应进行较长的任务。

注意:
OnIdle的缺省实现更新命令用户接口对象,如菜单项和工具条等,还实现了内部数据结构的清理。因此,如果你重载了OnIdle,你必须用重载版本中使用的lCount值来调用CWinApp::OnIdle。首先调用所有基类的空闲处理(即直到基类的OnIdle返回0)。如果你需要在基类处理完成之前进行一些工作,则应回顾基类的实现以在自己的工作期间选择一个合适的lCount值。

示例:
下面的两个例子演示了OnIdle的用法。

第一个例子处理两个空闲任务,用lCount参数来排列这些任务的优先权。第一个任务优先权较高,一旦可能你就应当执行此任务。第二个任务不十分重要,只有当用户输入有一个较长时间的间歇的时候才应执行此任务。注意其中对基类的OnIdle的调用。第二个例子管理着一组具有不同优先权的空闲任务。
BOOL CMyApp::OnIdle(LONG lCount)
{
  BOOL bMore = CWinApp::OnIdle(lCount);
  if (lCount == 0)
  {
    TRACE("App idle for short period of time/n");
    bMore = TRUE;
  }

  else if (lCount == 10)
  {
    TRACE("App idle for longer amount of time/n");
    bMore = TRUE;
  }

  else if (lCount == 100)
  {
    TRACE("App idle for even longer amount of time/n");
    bMore = TRUE;
  }

  else if (lCount == 1000)
  {
    TRACE("App idle for quite a long period of time/n");
    // bMore 没有被设为TRUE, 不在需要空闲
    // 重要:bMore 没有被设为 FALSE,因为 CWinApp::OnIdle可能还有其它空闲任务要完成。
  }
  return bMore; // 返回TRUE,只要还有其它空闲任务
}

第二个示例:
// 在这个例子中,有四个空闲循环任务,它们被赋予
// 不同的优先权,运行的机会不同:
// Task1在空闲时总能运行,要求在框架处理它自己的空闲循环任务时没有消息在等候。(lCount为0或1)
// Task2 仅当Task1以及运行时才能运行,要求当Task1运行时没有消息在等候。
// Task3和Task4仅当Task1和Task2都运行之后才能运行,
// 并且在此期间没有消息在等候。如果Task3能够运行,
// 则Task4总是在Task3之后立即运行。
BOOL CMyApp::OnIdle(LONG lCount)
{
  // 在这个例子中,像多数应用程序一样,你应该让基类
  // 的CWinApp::OnIdle在你试图进行任何附加的空闲循环
  // 过程之前完成它的处理。
  if (CWinApp::OnIdle(lCount)) return TRUE;
  // 基类的CWinApp::OnIdle为lCount保留0和1给框架自己的
  // 空闲处理使用。如果你希望与框架平等地共享空闲处理
  // 时间,则应替换上面的if语句,直接调用CWinApp::OnIdle,
  // 然后为lCount的值0和/或1加入一个case语句。首先应当研
  // 究基类的实现以理解你的空闲循环任务将会如何与框架的
  // 空闲循环处理竞争。
  switch (lCount)
  {
    case 2:
      Task1();
      return TRUE; // 下一次给 Task2 一个机会
    case 3:
      Task2();
      return TRUE; // 下一次给Task3和Task4一个机会
    case 4:
      Task3();
      Task4();
      return FALSE; // 再次回到空闲循环任务
  }
  return FALSE;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于CWinApp::OnIdle的解释 的相关文章

  • 我把华为云的Ubuntu 18.04升级到了Ubuntu 22.04

    华为云建站有些年头了 xff0c 当时装的是ubuntu18 04 xff0c 停止维护更新日期是2023年4月 xff0c 只剩半年时间就该停服了 xff0c 这么看来是时候升级以下系统版本了 xff0c 不然升级版本都可能会有问题 由于
  • Ubuntu Budgie 22.04 设置中文语言并安装拼音输入法

    之前将ubuntu server 22 04 安装了 Budgie Desktop 桌面环境 xff0c 系统语言是英文的 xff0c 如果要作为桌面使用还有些不适应 xff0c 我们要如何将系统语言切换为中文并支持中文输入呢 xff1f
  • OpenKylin常用软件安装

    由于OpenKylin仍处于测试阶段 xff0c 应用商店软件并不全 xff0c 所以很多软件的安装非常麻烦 xff0c 以下列出了一些常用软件的安装方法 需要的童鞋可以直接复制命令后进行安装 xff0c 安装软件需要使用root权限 xf
  • 利用sourceinsight宏(Quicker.em)提高编码效率和质量

    利用sourceinsight宏 Quicker em 提高编码效率和质量 Marco是sourceinsight软件一个强大的功能 xff0c 用户可以通过编写宏来实现自定义功能 这里有个比较流行的宏文件quicker em xff0c
  • Git Clone 报错 `SSL certificate problem: unable to get local issuer certificate`

    如果您在尝试克隆Git存储库时得到 SSL certificate problem unable to get local issuer certificate 的错误 这意味着Git无法验证远程存储库的SSL证书 如果SSL证书是自签名的
  • 树莓派从源码构建安装Git最新版

    1 查看Git版本 首先我们通过SSH客户端连接树莓派 在树莓派中通过查看 Git 版本信息 xff0c 我们只能看到最高版本显示为 2 30 2 xff0c 并且通过apt安装也无法将Git更新到最新版 git version sudo
  • linux安装部署免费confluence wiki

    Centos7安装部署免费confluence wiki 知识库 详细操作步骤 前言 xff1a confluence是团队协作软件 xff0c 改变团队工作方式 xff0c 作为现代化办公不可缺少的工具 wiki所需的安装包 xff1a
  • 对printf源码的分析

    对printf源码的分析 一 printf的源码如下 span class token macro property span class token directive keyword include span span class to
  • iPhone开发:可拉伸的图片

    还记得在Windows下用MFC或WTL写用户界面程序的时候 xff0c 为了给可改变大小的对话框加上背景图案 xff0c 需要对设计师提供的图片进行裁剪 把图片切成九块 xff0c 其中四个角是不拉伸的 xff0c 四条棱边可以在一个方向
  • 解决在KDE桌面环境WebStorm不能输入中文问题

    由于jetbrains官方包的问题 xff0c Fcitx5输入法文字候选托盘暂时不能更改 xff0c 如有最新解决办法 xff0c 可查看ArchWiki官方 xff0c 或者查看jetbrains官方 排查错误 cat etc loca
  • NAS如何使用SnapShot快照功能?

    Snapshot是基于Btrfs文件系统产生的快速备份和还原数据的第三方应用 xff0c 利用Snapshot为数据提供保护 xff0c 以防止因意外删除 应用程序崩溃 数据损毁和病毒所造成的数据丢失 1 TOS应用中心 xff0c 找到S
  • 备份电脑不求人,"时间机器"轻松备份你的Mac

    相比Windows 自带的系统还原功能 xff0c Mac有内置的Time Machine功能 xff0c 可以方便我们进行整机备份 xff0c 在关键时刻成为你重要数据的一颗 后悔药 xff01 Time Machine xff08 时间
  • NESTJS 服务化架构设计和项目搭建

    创建项目很简单 xff0c nest cli一键创建 xff0c 关键是如何基于nestjs现有能力进行架构设计 架构设计 项目背景 项目涉及的底层数据全部来自于公司的一个公共服务 jsf xff0c 该公共服务可对接口进行发布和订阅 xf
  • 视频转码 ffmpeg hevc to h264

    通过ffmpeg将hevc编码的MP4视频转码为h264编码 fmpeg i inputfile map 0 c a copy c s copy c v libx264 output mp4 顺带旋转角度也调整为0 参考 xff1a htt
  • linux下查看进程的状态 /proc/[pid]/status

    查看进程的状态 xff1a 1 查看进程的pid xff0c 以java为例 xff1a ps ef grep java 2 查看进程状态 xff1a cat proc pid status 关键字 linux root 64 localh
  • paho.mqtt.cpp交叉编译

    开发板 rk3288 43 lubuntu 16 04 主机 Ubuntu16 04 编译之前可能要安装一些软件 xff0c 可参考paho mqtt cpp文档 xff1a https github com eclipse paho mq
  • mosquitto-1.6.10 交叉编译

    openssl 1 0 2l tar gz mosquitto 1 6 10 tar gz 由于mosquitto 1 6 10版本较新 xff0c 需要选择openssl 1 0 2及较新版本 1 openssl span class t
  • C/C++ 简单debug宏函数

    span class token comment debug h span span class token macro property span class token directive hash span span class to
  • ubuntu 18.04 LTS 安装Qt qtcreator 、example

    https www cnblogs com SendBoringBackToNoWhere p 15050359 html sudo apt install qtcreator qt5 default qtbase5 examples qt

随机推荐

  • ubuntu 文件系统自动挂载U盘后是只读文件问题

    安装 ntfs 3g exfat fuse xff0c 之后重新挂载 apt get install ntfs 3g exfat fuse 重新挂载
  • mt7688 OpenWrt 编译

    一 OpenWrt源码下载 虚拟机 xff1a Ubuntu 16 04 LTS sudo apt install git subversion curl wget gawk git clone https git openwrt org
  • mysql trigger 使用以及与 sqlite3 trigger 比较

    一 触发事件的表与触发更新的表使用同一个表 使用情景 xff0c 表里的某行数据发生update时自动更新修改时间 updated sqlite3 3 40 0 MariaDB 10 10 2 对应 MySQL 8 1 sqlite3 up
  • 1.Linux中超频及cpufreq相关汇总

    1 蛤蟆笔记UNIX高级编程 cpufreq相关汇总 其中一些内容摘自网络 xff0c 此处蛤蟆根据自己阅读习惯和理解进行了一些汇总整理 随着 energyefficient computing 和 performance per watt
  • 双尺度与多尺度图像细节提升 python matlab

    双尺度图像分解细节提升 一副图像经过大尺度的均值滤波 公式10 后得到大尺度的基础层Bn xff0c 然后用原图减去大尺度基础层 公式11 可以得到一副小尺度的细节层Dn xff0c 然后加上原图In xff0c 图像细节得到提升 xff0
  • WSL关闭与windows的互交互(解决PATH等环境变量问题

    如果在windows和wsl中都安装了nodejs 那么由于wsl的互交互特性 npm的运行就会不太正常 以下是禁用互交互的步骤 在WSL的终端中输入 span class token keyword echo span span clas
  • 数据结构——树

    1 树的相关定义 xff08 1 xff09 树 xff1a 包含n xff08 n gt 0 xff09 个节点的有穷集合 xff0c 其中每个元素称为节点 xff08 node xff09 xff1b 有一个特定的节点被称为根节点或树根
  • Qt QImage图片透明设置(Thinkvd开发日志)

    开发Thinkvd中的player 设置透明度用的是sdl来实现的 xff0c 转换中的水印用的是png 如何设置水印的透明度 xff0c 实际上要求把图片转换成带alpha的32位即可 实现代码 xff1a 8 void ImageCom
  • 关于 win10 系统安装Geomagic Wrap 2017导致一直蓝屏重启解决方案

    学校进行专业实训 xff0c 开了一门3D打印的课程 老师要求下载Geomagic Wrap 2017 xff0c 但是凡是win10系统安装的人都出现了不同程度的蓝屏 xff0c 我的电脑更是一直蓝屏重启 xff0c 网上找了很多方法 x
  • 八数码问题完全版-是否可解判断及求解

    八数码问题 有一个3 3的棋盘 xff0c 其中有0 8 9个数字 xff0c 0表示空格 xff0c 其他的数字可以和0交换位置 求由初始状态 1 2 3 4 5 6 7 8 0 到达目标状态步数最少的解 其典型算法是广度优先搜索 xff
  • windows10-conda cmd使用时错误:‘conda‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

    在 windows10 上装完 conda 之后 xff0c 打开 cmd 想看看 conda 的版本 xff0c 结果找不到 xff0c 于是走上了解决之路 xff0c 并做个简单的记录 错误截图 问题原因 系统 path 环境没有进行设
  • Linux下安装Qt 6

    在Linux平台下 xff0c 安装Qt xff0c 与Windows基本一致 xff0c 都是Qt在线图形化安装界面 xff0c 但是有一点不同 xff0c 需要前期环境准备 安装必需环境 Linux 的 Qt 安装程序假定主机操作系统提
  • 51单片机的中断系统及编程(附案例)

    本文简单粗暴地阐述了中断的一些概念 中断源 中断寄存器各位的作用 xff0c 并写出了编写一个中断函数的流程 要点 不在意细节时 xff0c 可直接查看照搬 三 中断程序的编程 一 中断概念 中断定义 xff08 比喻 xff09 xff1
  • error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

    在visual studio 中 xff0c 出现 xff1a error C2143 语法错误 缺少 在 类型 的前面 这是因为该编译器要求把变量定义在函数空间或者局部空间前面 xff0c 不能随便定义 如 xff1a int n sca
  • SolidWorks 3D草图扫描

    SolidWorks 3D草图扫描需要注意的是 xff1a 如果路径是3d草图画的 xff0c 则轮廓也需要用3d草图功能画 xff0c 且路径和轮廓要分别画在两个草图中
  • 字典排序法

    原理见 点击打开链接 http wenku baidu com link url 61 NrIeFmVNamnb5jXvYAxfJ3cAW0gwXcO0YkFx mBqoDwvvQyVAPNlzogg0FHs3GXPzBC3g2jg4Wzx
  • 树莓派3(raspberry pi 3B)gpsd不能工作问题

    1 问题描述在这里面有 xff1a https www raspberrypi org forums viewtopic php f 61 28 amp t 61 138711 2 在这个帖子里面 xff0c 作者给出了解决方案 xff1a
  • (转) 深度学习在目标跟踪中的应用

    深度学习在目标跟踪中的应用 原创 2016 09 05 徐霞清 深度学习大讲堂 点击上方 深度学习大讲堂 可订阅哦 xff01 深度学习大讲堂是高质量原创内容的平台 xff0c 邀请学术界 工业界一线专家撰稿 xff0c 致力于推送人工智能
  • 树莓派3B+gpsd 3.16不能开机后自动启动问题

    自上一篇帖子通过编译gpsd3 16版本解决gpsd 3 11在树莓派上不能工作问题后 xff0c 想配置gpsd 3 16自动启动 但是经过不停的尝试 xff0c 发现还是不能成功自启 xff0c 在这过程中发现了一篇学习文档 xff1a
  • 关于CWinApp::OnIdle的解释

    CWinApp OnIdle virtual BOOL OnIdle LONG lCount 返回值 xff1a 如果要接收更多的空闲处理时间 xff0c 则返回非零值 xff1b 如果不需要更多的空闲时间则返回0 参数 xff1a lCo