空闲时间的处理:OnIdle,以消息循环过程中为例(顺便解释PeekMessage与GetMessage的不同)

2023-05-16

所谓空闲时间(idle time),是指「系统中没有任何消息等待处理」的时间。举个例子,
没有任何程序使用定时器(timer,它会定时送来WM_TIMER),使用者也没有碰触键盘
和鼠标或任何外围,那么,系统就处于所谓的空闲时间。
空闲时间常常发生。不要认为你移动鼠标时产生一大堆的WM_MOUSEMOVE,事实上夹
杂在每一个WM_MOUSEMOVE 之间就可能存在许多空闲时间。毕竟,计算机速度超乎想
像。
背景工作最适宜在空闲时间完成。传统的SDK 程序如果要处理空闲时间,可以以下列
循环取代WinMain 中传统的消息循环:
while (TRUE) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) {
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
OnIdle();
}
}

原因是PeekMessage 和GetMessage 的性质不同。它们都是到消息队列中抓消息,如果
抓不到,程序的主执行线程(primary thread,是一个UI 执行线程)会被操作系统虚悬住。
当操作系统再次回来照顾此一执行线程,而发现消息队列中仍然是空的,这时候两个API
函数的行为就有不同了:
  GetMessage 会过门不入,于是操作系统再去照顾其它人。
  PeekMessage 会取回控制权,使程序得以执行一段时间。于是上述消息循环进
入OnIdle 函数中。

 

来自:侯杰<<深入浅出MFC>>

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

空闲时间的处理:OnIdle,以消息循环过程中为例(顺便解释PeekMessage与GetMessage的不同) 的相关文章

  • Ubuntu Server 20.04最小部署openstack Wallaby(四)——Nova

    Compute服务与其他OpenStack服务协作 xff0c 协调各种工作 xff0c 是OpenStack的核心服务 xff0c 这里需要操作Controller和Compute两个节点 1 Controller节点配置 创建数据库 注
  • debian8 安装&配置 zsh

    请访问我的个人博客 sourcod 安装zshsudo apt get install zsh安装oh my zsh sh c 34 curl fsSL https raw githubusercontent com robbyrussel
  • Conda错误:Collecting package metadata (current_repodata.json): failed

    conda新安装设置清华源后发现并没有使用 xff0c 且会出现错误 Collecting package metadata current repodata json failed 换了科大源也没成功 xff0c 考虑可能是默认源的问题
  • OpenCascade与三角剖分 笔记

    笔记 摘自 http www cppblog com eryar archive 2013 05 26 200605 html 概述 三角剖分是平面剖分中的一个重要课题 xff0c 在数字图像处理 计算机三维曲面造型 有限元计算 逆向工程等
  • 利用DbgHelp获取导出函数信息

    include 34 stdafx h 34 include lt Windows h gt include lt imagehlp h gt include lt locale h gt pragma comment lib 34 Dbg
  • 《iOS之导航控制器的使用图解》

    通过代码的方式实现 xff1a 导航控制器 导航栏 xff08 height64 xff0c status状态20 xff0c 导航部分44 xff09 内容部分 导航控制器栈 xff1a 通过storyboard方式实现页面导航 设置默认
  • 【Ubuntu笔记】ubuntu18.04设置开机启动命令/脚本的三种方法(可sudo)

    转自微信 谭狗星 很多时候想开机时便启动想要启动的命令 xff08 甚至是需要sudo的命令 xff09 但是如何设置呢 xff0c 一般来说有以下三种方法 xff08 本文针对的是ubuntu18 04设置开机启动命令或者脚本 xff09
  • Pyperclip模块详解

    一 Pyperclip模块安装 Pyperclip模块兼容python2和python3 xff0c 能跨平台使用 安装指令如下 xff0c 在Anaconda的终端执行如下指令 pip install pyperclip 二 Pyperc
  • 如何在Ubuntu 18.04上安装Docker

    选项1 xff1a 使用默认存储库在Ubuntu上安装Docker 第1步 xff1a 更新软件存储库 更新本地软件数据库以确保可以访问最新版本 打开终端并输入 xff1a sudo apt get update 第2步 xff1a 卸载旧
  • iOS创建自己的pod库

    一 背景 在iOS开发中 xff0c 我们经常会使用到一些第三方库 xff0c 如AFNetworking SDWebImage等 xff0c 一般使用cocoapods来管理 本篇文章将介绍如何封装自己的pod库 二 封装步骤 1 在本地
  • Mac OS系统磁盘空间不断减少,直到为0

    问题描述 xff08 从网络摘录 xff09 xff1a 昨天上午Mac OS系统突然警告硬盘空间不足 xff0c 建议删除多余文件 经过清理后硬盘出现20G自由空间 xff0c 但今天系统再次警告硬盘空间不足 只好再次删除一些文件 xff
  • Git,Github和Gitlab简介和使用方法

    日期 xff1a 2016 08 04 来源 xff1a 简书 作者 xff1a frogoscar 字体 xff1a 大 中 小 来源 xff1a https www jianshu com p 8d497989f704 这年头不知道Gi
  • Ubuntu设置清华源

    为了在Ubuntu下安装软件快些 xff0c 需要使用国内的源 xff0c 比如清华源 步骤如下 xff1a 一 xff1a 备份源文件 cd etc apt 然后会显示下面的源文件sources list 输入命令行 xff1a cp为c
  • Git 中忽略某些文件或者文件夹

    Git 中忽略某些文件或者文件夹 有些时候 xff0c 你必须把某些文件放到Git工作目录中 xff0c 但又不能提交它们 xff0c 比如保存了数据库密码的配置文件啦 xff0c 等等 xff0c 每次git status都会显示 Unt
  • 教程:简单十步,在 iTunes 申请 App Store 退款

    你常在 App Store 买应用或音乐吗 xff1f 你肯定有因为买到坑爹的应用而心情糟糕 懊悔不已吧 xff1f 在这种情况下 xff0c 可能有一部分同学知道能向苹果提交退款申请 xff0c 但相信仍有很大一部分同学并不知道还有此等
  • Mac 终于有显示隐藏文件的快捷键了

    转载至 xff1a https hran me archives shortcuts to show hiden files in macos sierra html 在 macOS Sierra 之前 xff0c 要在 Finder 中查
  • UISearchBar的占位符 (Placeholder,包括图片文字) 如何居左显示 ?

    转载至 xff1a https blog csdn net qq 33226881 article details 76512656 UISearchBar的占位符 Placeholder 如何居左显示 xff1f 做项目的时候遇到这个问题
  • C语言冒泡排序

    1 基本原理 冒泡排序指的是在排序时 xff0c 每次比较数组中相邻的两个数组元素的值 xff0c 较小的数 xff08 从小到大排列 xff09 排在较大的数前面 排序的基本思想 两两相邻的元素进行比较 xff0c 并且可能的话需要进行交
  • dell optiplex ubuntu 14.04 安装 NVIDIA 显卡驱动

    公司配置的 dell optiplex使用核显带起双屏幕 xff0c 玩dota2无法特效全开 so xff0c 在京东上买了一块750Ti 安装驱动的时候需要切换到ubuntu的全命令行模式 xff0c 关掉桌面系统才能安装 这时候这个坑
  • golang tcp 2 unix socket proxy

    想将mysql 的TCP 封死 xff0c 所有外部链接由我的proxy来控制 xff0c so 写了一个 tcp 转 unix socket 的 proxy package main import 34 os 34 34 fmt 34 3

随机推荐