处理UI卡死的技巧

处理UI卡死的技巧

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

卡死的原因

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

解决方案

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值