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注释掉可以正常调用
{
Sleep(500); }
你怎么退出这个循环的,只有你退出了循环才能调用GetMessage
{ while(TRUE)
{
Sleep(500); } return TRUE;
}死循环了
程序一直在TESTCtrl函数的
while(TRUE)
{
Sleep(500); }
里面循环,阻塞了线程,所以就进不到TimerProc里去了.所以
while(TRUE)
{
Sleep(500); }
这种格式一般用在多线程中.
你这个函数,是互循环,并且,在循环体中,他还是在sleep,线程sleep了,他就啥都不做
然后睡醒了,又接着睡...........
程序就堵死在那了,还怎么响应消息