void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
printf("TimeOut. ");}DWORD TESTCtrl(void)
{ while(TRUE)
{
Sleep(500); } return TRUE;
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; // 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{ UINT_PTR uIDEvent ;
uIDEvent = ::SetTimer(NULL, 0, /*ms*/1000, TimerProc);
//开始工作
TESTCtrl();
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return nRetCode;
}而将TESTCtrl注释掉可以正常调用

解决方案 »

  1.   

    SetTimer的回调是基于消息触发的
      

  2.   

        while(TRUE)
        {
            Sleep(500);    }
    你怎么退出这个循环的,只有你退出了循环才能调用GetMessage
      

  3.   

    DWORD TESTCtrl(void)
    {    while(TRUE)
        {
            Sleep(500);    }    return TRUE;
    }死循环了
      

  4.   

    因为TESTCtrl()和你的TimerProc是在同一个线程里的,也就是主线程,
    程序一直在TESTCtrl函数的   
    while(TRUE)
        {
            Sleep(500);    }
    里面循环,阻塞了线程,所以就进不到TimerProc里去了.所以
    while(TRUE)
        {
            Sleep(500);    }
    这种格式一般用在多线程中.
      

  5.   

           TESTCtrl();
    你这个函数,是互循环,并且,在循环体中,他还是在sleep,线程sleep了,他就啥都不做
    然后睡醒了,又接着睡...........
      

  6.   

    你看看sleep能出那个循环吗,
    程序就堵死在那了,还怎么响应消息