TC官方合作论坛

 找回密码
 立即注册
查看: 3498|回复: 4

等待,就是延时,在阻塞问题的个人见解

[复制链接]
发表于 2020-12-18 15:49:53 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



等待, 这个自带函数, 我个人理解就是api SleepEx函数, 作用是让当前线程等待指定时间, 单位是毫秒,
首先, 关于阻塞和不阻塞, 对软件执行功能有没有影响, 是看你将它使用在哪里, 如果使用在UI线程里, 那就要注意!


比如下面这个写法, 这是错误写法,

1.jpg


当延时的时间很长, 还没结束时, 去操作界面, 比如点一下窗口标题, 就会出现"未响应"三个字,
留意延时写在哪里? 是写在 按钮0_点击() 这个事件里, 按钮等一切控件都属于父窗口, 整个窗口要处理的消息很多,
这一切事件执行都基于同一个"线程", 通常称为UI线程, 较长的延时把UI线程直接堵死, 然后界面就未响应, 直到延时完毕, 界面才会恢复.

比如下面这个写法, 这是正确写法,


2.jpg


上图很明显命令是同一个, 一模一样, 就是延时10秒, 那么这个为什么就不会阻塞UI? 有个细节, 那就是延时是用在另一个函数里, 而这函数用线程来启动的,
也就是说, 它的执行, 不属于UI线程管了, 已经是独立的, 所以, 没问题.


但是, 有时候, 不需要线程, 就想直接运行, 而又不要阻塞UI, 有没有方法? 答, 是有的, 这就要留意第二个参数, 通常被省略不填, 这是正确写法,


3.jpg


只需要很简单的参数二里写个"假", 就是不阻塞模式了. 想要省事的, 可以直接全用参数二为假的写法,  等待(200, 假)







回复

使用道具 举报

发表于 2020-12-18 15:54:30 | 显示全部楼层
大神,安卓里为什么没有假
回复 支持 反对

使用道具 举报

发表于 2020-12-19 10:58:02 | 显示全部楼层
我也是过了很久才突然注意到有非阻塞模式可以用
回复 支持 反对

使用道具 举报

发表于 2020-12-24 22:03:28 | 显示全部楼层
感谢大神分享,我说我一暂停线程就卡死一下,一会儿我去试下代码看是不是这个问题,写上假。
谢谢
回复 支持 反对

使用道具 举报

发表于 2023-6-15 22:46:45 来自手机 | 显示全部楼层
我也说一句学习一下下一
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-3-29 03:46 , Processed in 0.038178 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表