【发布时间】:2012-12-27 06:49:59
【问题描述】:
我有 2 个项目。一种是由没有 MFC 风格的 C++ Builder 构建的。另一个是VC++ MFC 11。
当我创建一个线程并创建一个循环时——假设这个循环向进度条位置添加一个——使用Sleep(10) 从 1 到 100,它当然适用于 C++ Builder 和 C++ MFC。
现在,Sleep(10) 等待 10 毫秒。好的。但问题仅在于我有打开的媒体播放器、Winamp 或其他任何能产生“声音”的东西。如果我关闭所有媒体播放器、winamp 和其他声音程序,我的线程会慢于 10 毫秒。
它需要像50-100 ms / each。如果我打开任何音乐,它会按预期正常运行。
我不知道为什么会这样。我一开始以为我在 MFC App 里面犯了一个错误,但是为什么 C++ Builder 也变慢了?
是的,我确信这与声音有关,因为我什至重新格式化了我的窗口,禁用了所有内容。最后我发现了那个声音问题。
我的代码需要什么吗?
更新:
现在,我按照代码,发现我在这样的区域使用Sleep(1)要等待1毫秒。原因是,我从左向右移动一个对象。如果我取消这个睡眠,那么移动就不会出现,因为它非常快。所以,我应该使用Sleep(1)。使用Sleep(1),如果音频on 则可以正常工作。如果音频关闭则非常慢。
for (int i = 0; i <= 500; i++) {
theDialog->staticText->SetWindowsPosition(NULL, i, 20, 0, 0);
Sleep(1);
}
因此,非常感谢有关此的建议。我该怎么办?
我知道这是错误的方法。我应该使用其他适当且有效的东西。但究竟是什么?哪个函数或类可以帮助我将静态文本从一个位置顺利移动到另一个位置?
另外,更改线程优先级也没有帮助。
更新 2:
更新 1 是另一个问题 :)
【问题讨论】:
-
进程的优先级相同。第二个有趣的事情是,如果我打开媒体播放器(但不播放音乐),我的线程程序以 2% 的 CPU 运行并且线程工作。如果我关闭媒体播放器,立即减速并占用 0% 的 CPU。
-
这可能是由于处理器限制了 cpu 的频率。
-
一切都是为了省电。 :-)
-
我想知道如果我使用
SetSystemPowerState();这会做任何事情吗? (我现在没有 VS IDE) -
@xangr 啊,好的。我不知道人们会这么说,但这是有道理的。