处理UI卡死的技巧

处理UI卡死的技巧

背景:处理win32以消息循环机制的进程
问题:UI卡死

卡死的原因

  1. UI线程处理了阻塞耗时的业务,导致UI加载不过来
  2. 异步线程处理了UI业务,导致莫名其妙的UI现象甚至崩溃
  3. 消息处理函数里面 弹模态框,UI卡死转圈

解决方案

首先,我们要了解到一个基本概念,就是win32以消息循环机制运行的程序,UI线程是包括消息处理函数的,所以所有耗时的操作不能放到这里面来。
SendMessage是阻塞的,PostMessage是非阻塞的。

针对上述问题,我们来谈一下解决方案:

  1. 分离业务操作和UI操作,耗时业务启用新线程来处理,UI的操作在主线程
  2. 如果异步里面要操作UI,发消息主线程,然后在消息处理函数里面处理UI操作
  3. 模态框也是阻塞的,要把业务操作和弹窗分离开来,保证业务操作的消息能立马执行完毕不被阻塞,弹窗单独发消息处理。 原理就是:父窗口的一个消息处理未返回,那么弹出的模态框暂时不能接替父窗口的消息循环,导致父窗口一直处于响应状态,直到子窗口被激活(鼠标放上去等操作)模态状态才真正生效。

相关推荐

  1. 处理UI技巧

    2024-07-18 12:50:01       22 阅读
  2. sqlplus登录无响应异常处理

    2024-07-18 12:50:01       37 阅读
  3. 定义以及产生必要条件,处理

    2024-07-18 12:50:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 12:50:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 12:50:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 12:50:01       58 阅读
  4. Python语言-面向对象

    2024-07-18 12:50:01       69 阅读

热门阅读

  1. 在 Debian 12 上安装 budgie-extras-common 包

    2024-07-18 12:50:01       23 阅读
  2. 边缘计算与图像识别:打造无缝的智能体验

    2024-07-18 12:50:01       25 阅读
  3. APScheduler的调度模式

    2024-07-18 12:50:01       18 阅读
  4. Electron 应用关闭突出程序坞

    2024-07-18 12:50:01       20 阅读
  5. 数据可视化入门

    2024-07-18 12:50:01       27 阅读
  6. 用mybatis-plus-generator快速构建简单代码

    2024-07-18 12:50:01       23 阅读
  7. LinearLayout实现原理分析

    2024-07-18 12:50:01       21 阅读
  8. 存储ODS数据的时候为什么在Hive中建立Iceberg表

    2024-07-18 12:50:01       19 阅读
  9. 基于 Gunicorn、Flask 和 Docker 的高并发部署模型

    2024-07-18 12:50:01       21 阅读
  10. 残月之肃-C++

    2024-07-18 12:50:01       18 阅读
  11. 升本1.0.5-规划-英语-207天

    2024-07-18 12:50:01       22 阅读