在用户界面线程上等待的危险性

news2024/10/6 10:42:27

我们做这么一个假设哈。

如果有一个线程,它拥有一个窗口,则在这个线程的整个运行过程中,我们都不应该调用 Sleep 函数。为什么?

因为 Sleep 调用会导致线程在睡眠等待期停止处理窗口消息。即使对于持续时间较短的睡眠也是如此,例如睡眠几秒钟和醒来以轮询系统中某些内容的状态。

如我之前在另一篇文章中所提到的,轮询会降低系统性能,还会损害系统在低功耗情况下节省能源的能力,并受到终端服务器的放大效应的影响。

如果当前处理器处于空闲状态,那就继续保持闲着。如果处理器很忙,那就赶紧让它完成计算任务,然后重新回到空闲状态。

但有时候我还是会看到如下的代码:

>> 请移步至 topomel.com 以查看图片 <<

请注意,此消息循环长达两秒钟而不处理消息。人们通常不会将两秒钟的睡眠插入负责与最终用户交互的线程中,但他们经常为后台工作线程执行此操作,这些线程为跨线程通信目的创建了隐藏窗口。由于线程没有可见的 UI,因此将最终用户一次挂起几秒钟是不会有明显的感知的。

但是,存在某些特殊情况。

如果系统需要广播消息,则必须等待此休眠线程最终唤醒并处理广播消息。同时,发出广播的组件继续等待。例如,用户可能双击了需要 DDE 才能打开的文档。DDE 过程从广播 WM_DDE_INITIATE 消息开始,该消息停滞在窗口后面。你的无响应隐藏窗口刚刚创建了一个 “Windows 似乎以随机间隔挂起几秒钟” 错误。

请注意,许多人忽略了调用 CoInitialize(可能间接)来初始化 STA 的线程会创建一个隐藏窗口以执行列集。因此,在单线程单元中运行的线程必须不停地处理消息。如果不这样做,由于窗口无响应,将导致神秘的系统级卡顿。

总结

对于在用户界面线程中执行的代码,我的观点是:不是非常必要,都不要使用 Sleep。
人的生命是有限的,软件运行的快,是一个终极需求。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The dangers of sleeping on a UI thread》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【正点原子STM32连载】 第三十三章 DAC实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第三…

亚马逊云服务器EC2开通Windows系统实例和远程RDP连接远程桌面

在这篇文章中&#xff0c;我们准备详细的亲测记录开通亚马逊云服务器EC2开通Windows系统。这里需要提醒的是&#xff0c;如果我们是初次免费体验亚马逊云服务器账户的话&#xff0c;是有支持单个云服务器750小时免费&#xff0c;如果我们超过部分是需要支付的&#xff0c;所以如…

探究贴纸滤镜和美颜SDK的技术实现原理

在移动应用高需求的背景下&#xff0c;贴纸滤镜和美颜SDK成为了移动应用中不可或缺的功能之一。那么&#xff0c;这些功能是如何实现的呢&#xff1f;本文将探究贴纸滤镜和美颜SDK的技术实现原理。 一、贴纸滤镜的技术实现原理 贴纸滤镜是一种可以在图片或视频上添加贴纸、滤镜…

1、DuiLib的编译和运行

文章目录 1、原生DuiLib的编译和运行1.1、下载并解压成这个样子1.2、打开.sln解决方案文件1.3、编译成功 2、网易DuiLib编译和运行2.1、下载并解压成这个样子2.2、打开.sln解决方案文件2.3、编译成功 3、腾讯DuiLib编译和运行vs 20173.1、下载并解压成这个样子3.2、打开.sln解决…

个人IP打造全过程:如何打造出属于自己的个人IP?

随着互联网的快速发展&#xff0c;个人IP已经逐渐成为一个热门话题。拥有自己的个人IP可以为你带来更多的机会和收益&#xff0c;让你在竞争激烈的市场中脱颖而出。但是&#xff0c;要想打造自己的个人IP并不是一件容易的事情。本文将为你介绍如何打造属于自己的个人IP。#IP# 一…

Burp Suite 功能详解(渗透测试工具)

一、抓包。 找到 代理--拦截--打开自带浏览器&#xff08;这里也可以自己找扩展设置代理&#xff0c;但还要添加安全证书等等&#xff0c;我觉得太麻烦了&#xff0c;还不如直接使用Burp Suite自带的浏览器抓包&#xff09;。 这是Burp Suite自带网页的页面。 点击开启拦截。 …

VMware Cloud Director Availability 4.6 | 灾难恢复和迁移 | DRaaS

VMware Cloud Director Availability 4.6 | 灾难恢复和迁移 | DRaaS 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-cloud-director-availability-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMware Cloud …

二维码在隐患排查中的应用:扫码上报,实时通知

正值安全生产月&#xff0c;对企业而言隐患排查是安全管理的重要环节&#xff0c;众多企业设立了安全部门&#xff0c;部门内的相关人员会定期对生产设备、作业场所、作业人员等进行检查&#xff0c;以确保安全隐患的消除&#xff0c;从而预防事故的发生。 传统的隐患排查主要…

2018年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2018年1月真题 四、写作&#xff1a;第56~57小题&#xff0c;共65分。其中论证有效性分析30 分&#xff0c;论说文35分。 56.论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对该论证的有…

掌握Spring Cloud:打造高效可靠的微服务生态系统

1、SpringCloud概述 Spring Cloud是一个用于构建分布式系统的开源框架&#xff0c;它提供了一系列的组件和工具&#xff0c;用于实现微服务架构中的各项核心功能。本文将重点介绍Spring Cloud中的关键组件&#xff0c;并详细探讨它们的功能和作用。 网关&#xff1a;Zuul/Gat…

自动化测试-selenium基础操作

元素操作 方法&#xff1a; 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法# 导包 from time import sleep from selenium import webdriver# 实例化浏览器 driver webdriver.Chrome()# 打开网址 driver.get(https://www.baidu.com/)# 需求 e…

HTTP项目常见状态码笔记(200,302,400,403,404,405,500...),

目录 认识 "状态码" (status code) 出现200 403 Forbidden 出现404 404 Not Found 出现 405 Method Not Allowed 出现 500 Internal Server Error 504 Gateway Timeout 302 Move temporarily 301 Moved Permanently 出现 "空白页面" 出现 &qu…

制作内网离线百度地图

下载离线地图瓦片 通过百度ak&#xff08;没有的可以去百度官网自行申请下载&#xff09;&#xff0c;拉取下列git 项目&#xff0c;可以免费下载离线瓦片 https://gitee.com/jinqianwang/baidu-offline-map-download 目录结构&#xff1a; 使用步骤&#xff1a; 第一步&am…

Midjourney绘画常用聊天界面介绍

刚开始使用MJ (Midjourney) 的小伙伴可能对这个复杂的界面有点迷糊&#xff0c;网站也无法翻译。 实不相瞒刚开始的时候我也一脸懵逼&#xff0c;对于小白来说启动门槛很高&#xff0c;但是认识之后就一点也不复杂。 接下来我们分三步认识Midjourney的界面: 第一步: 打开Mid…

基于Java+Swing+Mysql实现酒店管理系统

基于JavaSwingMysql实现酒店管理系统 一、系统介绍二、功能展示1.用户登陆2.首页3.开房4.退房5.房间信息6、顾客信息 三、数据库四、其它1.其他系统实现2.获取源码 一、系统介绍 系统功能&#xff1a;用户登陆、验证码验证、开房、退房、房间信息、顾客信息 运行环境&#xf…

【im群发推送软件】(Apple Push Notification service):APNs 是苹果提供的推送服务

iMessage 推送需要您对苹果的推送服务和相关开发技术有一定的了解&#xff0c;并熟悉应用程序开发的相关知识。以下是一些关键的方面和步骤&#xff0c;供您参考&#xff1a; 开发者账号和证书&#xff1a;您需要注册苹果开发者账号&#xff0c;并获取开发者证书用于推送服务。…

PEFAT:通过伪损失估计和特征对抗训练增强半监督医学图像分类

文章目录 PEFAT: Boosting Semi-supervised Medical Image Classification via Pseudo-loss Estimation and Feature Adversarial Training摘要本文方法Feature Adversarial Training 实验结果 PEFAT: Boosting Semi-supervised Medical Image Classification via Pseudo-loss …

PIQN:Parallel Instance Query Network for Named Entity Recognition

原文链接&#xff1a;https://aclanthology.org/2022.acl-long.67.pdf ACL 2022 介绍 问题 将命名实体识别任务作为阅读理解任务&#xff08;MRC&#xff1a;machine reading comprehensive&#xff09;来做&#xff0c;存在3个问题&#xff1a; 1&#xff09;一类问题只能提取…

腾讯云服务器可用区什么意思?怎么选择合适?

腾讯云服务器可用区是什么意思&#xff1f;可用区是指在同一个地域内电力和网络相互独立的区域&#xff0c;可用区可以做到故障隔离&#xff0c;所以可用区存在的意义在于构建高可用、高容灾应用&#xff0c;将应用部署在不同可用区内&#xff0c;一个可用区发生故障&#xff0…