首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

for循环中Sleep函数的有关问题

2012-04-10 
for循环中Sleep函数的问题我本想让图像隔1秒闪一次,但是现在的情况是直接隔了4秒,然后图形显示,这是怎么回

for循环中Sleep函数的问题
我本想让图像隔1秒闪一次,但是现在的情况是直接隔了4秒,然后图形显示,这是怎么回事啊?请教各位大神啊[code=C/C++][/code]for(m_iShanNum = 4;m_iShanNum > 0;m_iShanNum--)
{
DrawGrid();//画网格
::BitBlt(dc.GetSafeHdc(), rect.left, rect.top, rect.Height(),rect.Height(), MemDC, rect.left, rect.top, SRCCOPY);
Sleep(1000);
DrawSnake();//画图形
::BitBlt(dc.GetSafeHdc(), rect.left, rect.top, rect.Height(),rect.Height(), MemDC, rect.left, rect.top, SRCCOPY);

}

[解决办法]
onpaint 里面不要调用sleep函数 这个函数 一定要尽快的执行下去才可以。 越快效率越高 显示越好。

如果你想要一秒闪烁一次的效果 不防这样做,去掉sleep, 用settimer 设置一个1秒定时器 调用Invalidate()函数 刷新屏幕 就应该可以了。

onpaint消息 只会对无效Rect进行重绘,如果你不加上Invalidate函数 有可能不刷新的。
[解决办法]
OnPaint 里面不要调用Sleep 这个函数;
因为,OnPaint 完成的是“绘”这个操作本身,速度越快越好;
你要的“闪烁”,其实是绘完后的效果而已,并不是“绘”要花一秒;
你可以在Timer里面来执行操作(也不能Sleep,只是把Timer间隔设置成1秒),除非你另开线程,否则都不应该用Sleep

热点排行