是用
SetTimer();
....
OnTimer(){
    function();
};
好,
还是用
SetTimer();
...
if(PeekMessage()){
    TranslateMessage();
    DispatchMessage();
}
else{
    function();
}

还是
mStartTime = timeGettime()
....
mTime = timeGettime() - mStartTime();
function(mTime);
好?
三种方法各有什么优劣?

解决方案 »

  1.   

    SetTimer使用的是WM_TIMER消息,需要有消息循环。最后一种是获取间隔时间。
      

  2.   

    SetTimer();
    ....
    OnTimer(){
      function();
    };这个比较好用,MFC消息的信道
      

  3.   

    你第二种还弄个SetTimer做什么 第二种一般用在高频率刷新的时候
    个人见解了
      

  4.   


    因为WM_TIMER消息的优先级很低,在消息队列中消息比较多的时候,很容易因为阻塞导致OnTimer不响应或者延迟响应(即计时无效或不准确)
    所以我看到网上很多人说用PeekMessage,的确是高频率的刷新。但是在Allen Sherrod的《Ultimate Game Programming with DirectX》书中,响应键盘鼠标和创建关闭消息用的是第二种方法,在做动画的时候用的是第三种方法。
    所以我想知道这三种方法从执行效率和对CPU的无任务空占方面来考虑,各有什么优劣,以及分别适用于什么情形?谢谢指点!