Win32 中的 Sleep() 使程序无响应

2023-12-11

基本上就是标题所说的。我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本。我注意到,当程序没有焦点时,它可以正常工作并且文本刷新正确,但是当我将鼠标悬停在程序上或尝试单击它的菜单时,Windows 通知我该程序没有响应,并询问我是否我希望它终止。当循环结束时,程序返回到正常状态。还有我可能做过的任何操作(比如移动它或关闭它)Sleep()-ing 在循环之后执行。这是一些代码:

case ID_BUTTON_START:
// Code executed when pressing Start Button.
char startButtonText[30];  // Storing next loop text
 for (int i=5; i>0; i--)
    {
       sprintf(startButtonText, "Starting in ... %d", i);
       SendMessage(hwndButtonStart, WM_SETTEXT, 0, (LPARAM)(startButtonText));
       Sleep(1000);
     }

这是正常的吗?如果不是的话是什么原因造成的?


The WndProc不在应用程序内异步处理消息,这意味着所有消息都应快速处理并立即传递返回值。你不能Sleep在 UI 线程中,因为它会阻止其他 UI 事件的处理。任何可能需要很长时间的繁重工作或同步请求/作业都应该在工作线程中执行。至少有三个可行的选择:

  1. 创建一个新的 (工作线程) 来完成任务。
  2. 如果该任务可能经常完成,请使用线程池反而。
  3. 设置并订阅定时器事件.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win32 中的 Sleep() 使程序无响应 的相关文章

随机推荐

  • 如何将我构建的模型拟合到另一个数据集并获得残差?

    我对数据 A 拟合了一个混合模型 如下所示 model lt lme Y 1 X1 X2 X3 random 1 Class method ML data A 接下来 我想看看模型如何拟合数据 B 并获得估计的残差 R 中有可以用来执行此操
  • 如何在java中将Wav文件分割成多个通道?

    我想编写一个Java程序来将wav文件分割成多个通道 输入将是一个 wav 文件 输出将是与通道数量一样多的 wav 文件 我可以用 Java 读取 wav 文件 但是如何将其拆分为多个通道 Wave 标头包含每个样本的样本大小 以位为单位
  • IIS 5 上的 ASP.NET 2.0 应用程序导致错误(aspnet_wp.exe (PID: XXXX) 意外停止。)

    在 Windows 2000 服务器 IIS 5 上托管 ASP NET 2 0 Web 应用程序后 我无法浏览该网站 浏览器上显示以下错误消息 并添加了三个事件日志条目 浏览器上的错误消息 服务器应用程序不可用 您尝试访问此 Web 服务
  • 如何高效创建数据透视表?

    我确实有一个像这样的数据框 import pandas as pd df pd DataFrame c0 list ABC c1 join list ab join list def join list s c2 list DEF c0 c
  • 使用 Img.at 获取无符号短值

    我目前正在为我的一个班级研究高动态范围算法 我在使用 OpenCV 时遇到问题 我有一个 16 位原始图像 我正在尝试使用显示该图像中的值 image at
  • Python 日期转换。如何将阿拉伯日期字符串转换为日期或日期时间对象python

    我必须将此日期转换为正常的日期字符串 对象 至 1994 年 4 月 11 日 我已经解决了这个问题 可能不是最好的 但它有效 coding utf8 import unicodedata s u def date conv unicode
  • HIVE 枢轴和总和

    我有一个表格 我试图弄清楚如何根据第二列中的值进行透视和求和 输入示例 own pet qty bob dog 2 bob dog 3 bob dog 1 bob cat 1 jon dog 1 jon cat 1 jon cat 1 jo
  • JPA 和 Bean 验证的唯一约束

    我想要一个 UniqueBean Validation 的约束 但这不是标准提供的 如果我使用 JPA UniqueConstraint我不会有独特的验证和错误报告机制 有没有办法定义 Unique作为 Bean Validation 约束
  • 如何使用AJAX上传大型CSV文件? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我们有一些包含大量记录的 CSV 文件 需要使用 Web 界面将此文件上传到 MySQL 数据库 这些文件是从不同的现场工作中收集的 并通过网络应用程序上传到服务器 Web 应用
  • Android原生webrtc:已连接后添加视频

    我已经使用 Google 代码库中的 libjingle so 和 PeerConnectionClient java 等在我的 Android 应用程序中成功运行 WebRTC 一段时间了 但是 我现在遇到一个问题 用户仅以音频方式启动连
  • 在 Python 2.7 中,如何覆盖单个函数的字符串表示形式?

    如何覆盖 Python 中单个函数的字符串表示形式 我尝试过的 gt gt gt def f pass gt gt gt f
  • 异步 ReadDirectoryChangesW 调用会阻止线程退出

    介绍 我正在编写一个小应用程序 用于监视某个目录中是否有新添加的文件 我想将监控代码放在一个单独的线程中 这样我就可以让主线程自由用于其他事情 并在需要时取消监控线程 相关信息 我在用读取目录更改W进行监控 我正在使用原始 WIN32 AP
  • pandas DataFrame 的反向地理编码

    我们有经度和纬度数据 需要将它们转换为纽约市的邮政编码 有什么方法可以处理 20 000 行的 python 包吗 uszipcode 包可以满足您的需求 from uszipcode import SearchEngine search
  • 动态显示资源/可绘制图像

    我正在尝试将不同的图像 jpg png 动态地放入ListView from res drawable 我从数据库中获取的图像的名称 图像本身位于res drawable folder 这是我已经拥有的 错误为 D 字符串图像名称 gt 数
  • Java 和 C# 中的 getBytes() 等效项

    我想将 Java 中的类转换为 C 大部分更改已经完成 但我对此部分不太确定 我想转换这行代码 byte arrayOfByte1 paramString getBytes 我已经尝试过这个 byte arrayOfByte1 BitCon
  • Angular ui-router 嵌套视图不会刷新 Angular 服务检索到的数据

    我有一个不平凡的 Angular SPA 它使用 ui router 来管理多个视图 其中许多视图同时可见 我需要模型在控制器之间可见 因此我编写了服务 允许控制器拉取已更新的模型数据的新副本 我提前为问题的长度表示歉意 但我会先说明问题
  • 在 Google Maps API v3 中仅打开一个 InfoWindow

    我只需在 Google 地图上打开一个 InfoWindow 在打开新的 InfoWindows 之前 我需要关闭所有其他 InfoWindows 有人可以告诉我该怎么做吗 您只需创建一个InfoWindow对象 保留对其的引用 并为所有标
  • 使用 MVC 和实体框架实施审核日志/更改历史记录

    我正在使用实体框架在我的 MVC 应用程序中构建更改历史记录 审核日志 所以具体在编辑方法中public ActionResult Edit ViewModel vm 我们找到我们正在尝试更新的对象 然后使用TryUpdateModel o
  • 如何让 Homebrew 恢复到之前的状态?

    我删除了一些 rb 文件 cassandra rb 电子邮件受保护 and 电子邮件受保护 从文件夹 usr local Homebrew Library Taps homebrew homebrew core Formula 来自 mac
  • Win32 中的 Sleep() 使程序无响应

    基本上就是标题所说的 我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本 我注意到 当程序没有焦点时 它可以正常工作并且文本刷新正确 但是当我将鼠标悬停在程序上或尝试单击它的菜单时 Windows 通知我该程序没有响应 并询问我是否我