如何优化此代码以不"freeze"我的计算机?
How could I optimize this code to not "freeze" my computer?
#include <windows.h>
int main()
{
XFORM blah;
blah.eM22 = 1.0f;
blah.eDx = 0.0f;
blah.eDy = 0.0f;
blah.eM11 = 1.0f;
float blahm1 = 0.0;
float blahm2 = 0.0;
HDC hdc = CreateCompatibleDC(NULL);
HBITMAP cross = (HBITMAP)LoadImage(NULL, ("C:\Documents and Settings\Death\My Documents\45Hand.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HBITMAP crossmask = (HBITMAP)LoadImage(NULL, ("C:\Documents and Settings\Death\My Documents\45Hand2.bmp") ,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
while (1)
{
HDC hdc_x = GetDC(HWND_DESKTOP);
blahm2 = (blahm2 + 0.0001f);
blah.eM12 = blahm1;
blah.eM21 = blahm2;
SelectObject(hdc, cross);
SetGraphicsMode(hdc_x, GM_ADVANCED);
SetWorldTransform(hdc_x, &blah);
BitBlt(hdc_x,512,384,800,703,hdc,0,0,SRCAND);
ReleaseDC(HWND_DESKTOP,hdc_x);
}
return 0;
}
我不希望这个延迟如此疯狂,但是当我同时执行这个程序的两个实例时,我的整个计算机实际上变得没有响应,例如,如果我在这些情况下右键单击,它将花费大约10秒的时间来显示菜单。
无限循环本身可能是一个问题,但我认为实际问题(假设您确实希望它无限循环!)更多地来自于这样一个事实,即它是一个紧密和无限循环,并且它不允许调度器将控制权交还给其他任务。
要解决这个问题,您应该确保您的循环允许其他任务有机会运行。
"休眠"通常是一个简单的解决方案,或者在线程之间进行实际的同步。
删除无限循环:
while (1)
{
// Repeat this code forever...
}
你有两个选择:
- 正如其他人所提到的,以某种方式在while循环 中添加break
- 使用线程,在while循环中使用sleep(nb_milliseconds)来平滑CPU资源使用。
第二个选项的优点是允许您在程序的单个实例中同时运行两个治疗实例。
警告:根据编译器或平台的不同,线程的处理方式不同,但您会自己发现
我想我明白你想要做什么;但是这不是Windows程序应该写的方式。
如果您看一下这个示例程序,您将看到它有一些处理WM_PAINT
消息的代码。这就是你的代码的位置。
编辑添加
我没有注意到绘制的对象移动。更好的方法之一是:
1)当需要更新位置时,使用SetTimer()
给自己发送消息
2)当你得到WM_TIMER
消息时,计算新的位置并调用InvalidateRect()
(这告诉Windows有东西要重新绘制)
3)在WM_PAINT
处理程序中,进行实际绘图。
这样做的目的是让Windows为你做调度,保持UI响应。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- 如何优化此代码以不"freeze"我的计算机?
- 距离使我的迭代器"freeze"