我的本意是想限制程序的刷新速度,在有需要的时候渲染一帧,平时一秒一帧或者更慢就行了,减少资源占用
刚开始的时候是在Present之前加延迟
WaitForSingleObject(AllowPresent,1000);
这样写的话如果我不SetEvent(AllowPresent),Present就会一秒执行一次,有需要的时候SetEvent一下,就能立即渲染一帧了
但是现在我发现WaitForSingleObject和sleep一样,会让整个线程挂起,等待的这1s内的键盘输入都被无视了...能不能不让程序渲染,并且还能接受键盘的输入呢?
我曾经设想过hook Present,然后不执行原版的Present,但是这样只是不交换表面,显卡还在不断绘制BackBuffer啊...如果是不执行原版BeginScene或者EndScene会怎么样呢?  我试过注释掉这两个函数,结果显示出来的是空白,但是中间的绘制函数是不是依然在绘制呢?

解决方案 »

  1.   

    ...突然发现我的思路有点问题...
    刚才试验了一下,试验品是孤岛危机2,只延迟present的情况下
    限制fps=1   cpu占用13%
    限制fps=2   cpu占用12%
    限制fps=20  cpu占用6%左右
    不限制帧速 fps=60 cpu也不过13-15%浮动
    我明明是减少了运算量啊,莫非WaitForSingleObject会大量占用cpu?另外求一个检测显卡占用率的软件现在我去试试忽略BeginScen
      

  2.   

    额...上午的测试弄错了...数错位置了
    现在重新测试的结果是把EndScene和BeginScene注释掉 对游戏一点影响都没有
    另外游戏的渲染和输入好像不是分离的...我也没办法把它分离开啊