小弟想把定时器设为每十秒一次,启动settimer之后进入while死循环,但是定时器的回调函数好像就执行不了了,请教各位大神是什么个原因?还有就是我用的不是窗口类,看网上不是窗口类也可以用定时器的,不知道是不是这个的事?
::SetTimer(NULL,0,10000,TimerProc);
while(1)
{;}
//
void CALLBACK EM200::TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
pthis->GetNetData();}
//ORZ

解决方案 »

  1.   

    int x = 0;
    while(x <10000)
    {
      Sleep(1000);
    }问题的关键应该是系统是怎么协调消息回调函数和其他线程的问题的,这个我还真没认真思考过
      

  2.   

    SDK里面比较简明,主线程有
    while (GetMessage (&msg, NULL, 0, 0))
            
        {
            
                TranslateMessage (&msg) ;
            
              DispatchMessage (&msg) ;
            
        }
    ,如果主线程里有死循环,那么以上这段代码就执行不到,消息回调函数也执行不到,MFC同理
      

  3.   

    为什么要弄个死循环呢?要不你在死循环中加上以下代码while (GetMessage (&msg, NULL, 0, 0))
        
      {
        
      TranslateMessage (&msg) ;
        
      DispatchMessage (&msg) ;
        
      }
      

  4.   

    这类问题已经被问了很多次了。看来“回调函数”这个名称很迷惑人啊。任何回调函数,本质上都是被你的程序自己调用的!好比你的程序调用FuncA,FuncA又调用FuncB,那么从根本上来讲,FuncB不还是你的程序调用的?如果FuncB是你自己写的,而FuncA却是别人写的(比如是微软的程序员写的,并且被叫做API),此时FuncB就会被叫做“回调函数”。不过FuncA究竟是谁写的,对调用关系有什么影响吗?如果没有的话,那既然你的程序正在死循环,你又怎么可能期望FuncB被调用?
      

  5.   

    楼主不用要While(1)这种循环 这样肯定不能执行定时器函数楼主也可以把While(1)做成一个定时器啊 比如每隔10ms执行while循环一次 当然6楼的方法也行