主线程消息处理

2023-11-16

写程序过程中,往往会遇到在按钮时间中执行一个循环事件(for/while)耗费比较长的时候,这个时候会造成界面的假死想象,对于经常写程序的人来说,解决起来相对比较容易,创建一个子线程,然后把事件放到子线程执行;但是对于初学者而言,创建子线程有时候又觉得麻烦,要解决这种问题其实不难,最容易想到的当然是sleep函数,但是测试效果并不理想,这里我介绍另外一种思路,在循环中调用如下函数即可,功能是获取消息并把消息给传递出去就可以了。

代码实现如下:

void DoLoopEvents(DWORD dwTimeout)
{
    DWORD dwTickcount = GetTickCount();
    while ( GetTickCount() - dwTickcount < dwTimeout )
    {
        MSG msg;
        if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
        { 
            //从Windows消息队列中取出消息
            if (msg.message== WM_QUIT)
            { 
                //如果消息为退出,发送退出消息
                ::PostQuitMessage(-1);
            } 

            if (!AfxGetApp()->PreTranslateMessage(&msg))
            {
                //如果无法预处理消息
                ::TranslateMessage(&msg);//转换消息
                ::DispatchMessage(&msg);//发送消息
            }
        }

        AfxGetApp()->OnIdle(0);AfxGetApp()->OnIdle(1);//消息队列为空时闲置一段时间 
    }
}

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

主线程消息处理 的相关文章

  • VC++ GDI+将CDC保存为图片文件(bmp、jpg、png)

    int GetEncoderClsid const wchar t format CLSID pClsid UINT num 0 UINT size 0 ImageCodecInfo pImageCodecInfo NULL GetImag
  • VC++ 控制台程序常用接口

    1 申请一个控制台窗口 如果程序本身是控制台程序 可以不用调用 AllocConsole 2 获取控制台屏幕缓冲区的句柄 HANDLE m hConsole GetStdHandle STD OUTPUT HANDLE 3 设置控制台标题
  • C++ 多语言切换

    如果设置UI资源文件非重点不做介绍 设置英文版接口 SetThreadUILanguage MAKELANGID LANG ENGLISH SUBLANG ENGLISH US 此时如果操作系统的语言选择的是简体中文 那么掉系统的AfxMe
  • OpenGL GLFW入门篇 - 画点集

    效果图 主体代码 void DrawPoints void int i GLfloat x y glPushMatrix 另一个相对的Z平移可以分离对象 glLoadIdentity glTranslatef 0 0 0 0 0 f 设置点
  • VC++ 程序启动即隐藏

    所谓的隐藏是程序启动后不显示主窗体 网上介绍了很多方法 是否达到效果 众说纷纭 这里只介绍一种在项目中实际应用到的切实可行的方法 这里假设主窗体为CMainDialog 1 变量声明 BOOL m bShowWindow 2 给变量赋初始值
  • C++ 结束进程

    有时候进程未正常退出 导致进程列表遗留僵尸进程 程序启动需要杀死这种僵尸进程 include TLHELP32 H void TerminateSelfApplication TCHAR szFileName MAX PATH 0 TCHA
  • 通过GetVersionEx和ntoskrnl.exe获取操作系统版本号

    include
  • WTL 界面设计篇(CSkinDialog)

    头文件声明 CSkinDialog h pragma once include
  • OpenGL GLFW入门篇 - 画矩形

    效果图 主体代码 void DrawRectangle void GLfloat xl yt xr yb w h glPushMatrix glLoadIdentity glTranslatef 0 0 0 0 0 f w 1 2 h 1
  • C++ 可扩展的内存缓冲区

    类声明 CMemBuffer h pragma once class CMemBuffer public CMemBuffer DWORD dwSize 0 CMemBuffer void 申请内存 BOOL Realloc DWORD d
  • VC++ CSWDirectoryListCtrl磁盘文件列表

    效果图 头文件定义 CSWDirectoryListCtrl h pragma once include afxwin h include
  • Node.js EventEmitter事件

    Node js EventEmitter Node js 所有的异步 I O 操作在完成时都会发送一个事件到事件队列 Node js 里面的许多对象都会分发事件 一个 net Server 对象会在每次有新连接时触发一个事件 一个 fs r
  • VCPKG 包下载失败解决思路

    vcpkg经常会遇到资源无法访问 可能是域名解析出了问题 我们只需要将域名解析后的ip地址添加到hosts文件列表中可解决此问题 如 185 199 108 133 raw githubusercontent com 在此之前可先通过终端p
  • EasyPR编译指南

    1 下载源码 https github com liuruoze EasyPR Download ZIP或者git https github com liuruoze EasyPR git 将代码解压到硬盘目录下 例如F 车牌识别 Easy
  • GmSSL 在Windows上的使用(编译和使用)

    1 源码的下载 GitHub guanzhi GmSSL 支持国密SM2 SM3 SM4 SM9 SSL的密码工具箱 2 编译工具的下载 首先安装VS开发工具 接着下载ActivePerl 打开VS命令提示符 管理员权限 并切换到 Acti
  • VC++ CComboBox自绘(颜色下拉列表框)

    使用前 请将控件的Style属性设置为DropdownList 下拉列表 Owner Draw设置为Fixed Has Strings设置为TRUE 效果图如下 头文件声明 CSWColorComboBox h pragma once in
  • C++ xml库的选择

    自从触及xml文件的读写 一直以来都是用的tinyxml2 接口简单 然而近期项目频繁出错 跟踪调试发现 问题出在了xml文件的读写上 当节点数超过百万级别的时候 内存暴增到G的当量 很显然程序会由于内存申请不足崩掉了 果断寻找替代品 百度
  • VC++ CComboBox自绘阶段性总结

    在绘制列表框左侧的时候 本来说是采用的CImageList接口进行绘制 结果发现绘制后的图标不干净 有锯齿或者黑色背景存在 于是采用了GDI 来实现左侧图标的绘制 代码如下 GDI是完全可以通过图像处理彻底解决图标不干净问题的 之前文章有介
  • 粤嵌GEC6818开发板-入门感慨篇(续一)

    触摸屏的事件 include
  • C++ StrCmpLogicalW文件名排序

    打开资源管理器 文件列表如下 搜索文件列表 include

随机推荐

  • Origin 2017 给曲线加标记符号

    最近在用Origin 2017画曲线图 需要给图像得曲线加上不同得标记符号用以区分 把操作步骤记录下来 免得忘了 1 用Origin 2017打开一个曲线图 在任意一条曲线上点击右键弹出菜单 选择 绘图更改为 选择 点线图 2 选择之后 可
  • myeclispe

    1 快捷键 ctrl alt h 查哪里调用该方法 ctrl o直接查方法 Ctrl Shift F格式化代码 ctrl f 当前页面快速搜索 ctrl shift r全局搜索类或者 xml文件等 ctrl h file search 全局
  • Springboot程序开启远程DEBUG

    一 远程debug的原理 Spring Boot程序远程debug的原理主要是通过在启动时指定JVM参数来启用远程调试模式 并在调试器中连接到程序所在的调试地址 从而实现对程序的远程调试 具体步骤如下 在运行Spring Boot程序时 在
  • 【2023考研】数据结构常考应用典型例题(含真题)

    前言 本文针对 数据结构 博主花了几天时间列出了考研常考的应用题型 讲解详细 方便复习 各类题型所涉及的知识点包括但不限于队列 二叉排序树 平衡二叉树 哈夫曼树及哈夫曼编码 图的存储 最小生成树 关键路径 排序算法等等 标题即为考点 例题出
  • P1010 [NOIP1998 普及组] 幂次方 递归模拟

    题目描述 任何一个正整数都可以用 2 的幂次方表示 例如 137 2 7 2 3 2 0 同时约定方次用括号来表示 即 a b可表示为a b 由此可知 137 可表示为 2 7 2 3 2 0 进一步 7 2 2 2 2 0 2 1 用 2
  • Macbook air 安装Windows 10 错误:no bootable device insert boot disk and press any key 终极解决办法

    macbook型号 air 2012 当前操作系统 Catalina 安装工具 boot camp assistant 要安装的双系统 windows 10专业版 下载来源于微软官方 出现问题 安装系统时提示 no bootable dev
  • 硬件描述测试软件库中74138,数字系统设计与Verilog HDL课后习题

    习题1 1 1现代EDA技术的特点有哪些 1 2什么是Top down设计方式 1 3数字系统的实现方式有哪些 各有什么优缺点 1 4什么是IP复用技术 IP核对EDA技术的应用和发展有什么意义 1 5用硬件描述语言设计数字电路的优势是什么
  • 关于SQLyog创建的数据库不显示的问题

    最初的问题是这样的 创建了很多数据库 然而只显示一个mysql 用show databases语句 所有的数据库又能显示出来 原因是 创建连接的时候数据 库的那一栏填了mysql 重新创建 不用填写即可 这样就好了 网上搜了好多解决办法 都
  • Sudo 堆缓冲区溢出致本地提权漏洞(CVE-2021-3156)

    1 漏洞描述 2021年1月26日 Sudo发布安全通告 修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞 当sudo通过 s或 i命令行选项在shell模式下运行命令时 它将在命令参数中使用反斜杠转义特殊字符
  • macbook pro换固态硬盘ssd与移植mac os x系统

    macbook买了一年多了 当时选择了macbook pro 2012 最近一段时间 开机越来越慢了差不多要2分钟 没办法只好给电脑硬盘升级了 准备 1 淘宝上700元左右200多G固态硬盘 2 一个空的移动 1T 硬盘用来系统备份移植 t
  • webpack打包报错:if (!scriptUrl) throw new Error(“Automatic publicPath is not supported in this browser“)

    翻车现场 ERROR in Error D Work test webpack demo 05 打包图片资源 src index html 104 if scriptUrl throw new Error Automatic publicP
  • tq210-kernel 3.0.8 NFS+文件系统

    2016 11 25 kernel 4 1 33的网卡驱动一直没有调通 先放一放 先利用板子带的kernel3 0 8来做个文件系统 busybox 是一个工具箱 单个bin文件实现常用的ls cd 等等命令 堪称瑞士军刀 编译很简单 看看
  • 《C++ primer》练习3.17:改写单词为大写

    最近看 C primer 有这样一个题目 从cin读入一组词并把它们存入一个vector 对象 然后设法把所有词都改写为大写形式 输出改变后的结果 每个词占一行 考察 怎么输入字符串 怎么存入vector对象 怎么对字符串字符处理 代码 i
  • Object.equals方法的重写

    简要说明下 重写equals 一般都需要重写Object hashCode方法 因为ObjectA equals ObjectB 时 按理说 ObjectA hashCode ObjectB hashCode 但是重写equals 不重写h
  • 查看linux用户密码

    需要root用户 用户名在 etc passwd这个文件中 密码在 etc shadow中 cat etc passwd cat etc shadow root 6 1WtyW6O0baQmTkDG o YXXTOZSb7hP4Hitigz
  • MATRIX: 1 ctf challenge

    MATRIX 1 About Release Back to the Top Name Matrix 1 Date release 19 Aug 2018 Author Ajay Verma Series Matrix Download B
  • OpenAI-ChatGPT最新官方接口《微调ChatGPT模型》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

    微调ChatGPT模型 前言 Introduction 导言 What models can be fine tuned 哪些模型可以微调 Installation 安装 Prepare training data 准备训练数据 CLI d
  • VC下MFC程序自删除(自杀)几种方法的实践与探讨

    在VC下做了个MFC的程序 想让他运行后 自动删除自己 在网上看了些资料 方法也有一些 都实践了一下 感觉对MFC的程序 使用cmd exe可能更合适一些 其他的方法也蛮好 蛮经典的 不过我感觉用在MFC程序上就不太合适了 我实践的方法有三
  • 程序设计职工管理系统

    需求分析 1 1 设计系统的目的分析 本系统要求用 C 语言建立一个职工信息管理系统 本职工信息管理系统可以实现对众多员工信息的管理 包含对职工信息进行添加 查询 删除 修改 1 2系统的界面要求 按任意键便可以进入主菜单 在主菜单上显示出
  • 主线程消息处理

    写程序过程中 往往会遇到在按钮时间中执行一个循环事件 for while 耗费比较长的时候 这个时候会造成界面的假死想象 对于经常写程序的人来说 解决起来相对比较容易 创建一个子线程 然后把事件放到子线程执行 但是对于初学者而言 创建子线程