【发布时间】:2011-12-14 02:48:50
【问题描述】:
我不久前开始学习 c++。我用 Visual Studio 2010 做了很多控制台程序,现在我想制作 win32 程序。我阅读了很多教程,现在我了解了基础知识。
我做了一个按钮来调用另一个函数。该功能在所有工作中都做得很好。但是这个函数中有 Sleep(x) 并且在睡眠没有结束时 GUI 没有响应。该功能在 60 秒内完成,因为其中有很多睡眠,但它会做所有应该做的事情,这次 GUI 没有响应。
我想我知道这个问题的根源。在我看来,问题是睡眠完全暂停了应用程序(Windows 说:没有响应)。
如何进行不冻结 GUI 的睡眠/暂停?是否有一个功能或者我必须以完全不同的方式来完成它?
提前谢谢你!
【问题讨论】:
-
真的需要睡眠调用吗?您的函数真的需要“在一定时间内什么都不做”吗?如果是这样,请告诉我们原因。这肯定会帮助您获得更好的答案。
-
如果函数定期执行某些操作,请考虑使用 WM_TIMER 消息。
-
我尝试制作一个魔兽世界自动登录器。它的小兄弟(一个控制台应用程序)运行良好。 (这个版本也是除了 GUI 冻结)。我的方法如下:从ini文件中获取用户名/密码。它启动 wow.exe,但在 wow 加载时它不需要做任何事情。所以它睡了大约8秒。之后将用户名复制到剪贴板并“按” ctrl+v 等等。我知道这不是最好的方法,但这就是我能做的。我只做这样的程序来学习。这也是我问这个问题的原因。 :)
-
“我知道这不是最好的方法,但这是我能做的。”如果可行,我认为这是一个很好的解决方案。但是,请注意,在不同的 PC 上硬编码计时很困难:在每台计算机上启动 WoW 的时间取决于很多因素(性能、正在运行的其他程序等)
-
我知道。我让它在 ini 文件中是可变的,所以你可以选择有很多秒等待。控制台兄弟很棒,但感谢社区的帮助,GUI 会更加强大。 :)