一个看似简单却迷惑的有关问题

一个看似简单却迷惑的问题。
各位,我编写了个测试while循环的小程序,代码如下
void CTest_WhileDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
int i=1;
while (i<10000)
{
i=i+1;
Sleep(100);
}
}

产生exe运行后,在任务管理器中查看,就是无响应了,把鼠标移至应用程序的界面上,鼠标呈现漏斗状(忙碌中),而且产生了两个应用程序(我只开了一个exe且只点了一下TEST),如图:
一个看似简单却迷惑的有关问题
请问各位,这是什么原因呢?这样属于死循环的范畴吗?怎样才能避免呢?

------解决方案--------------------
引用:
那到底该如何写这段代码,请明示吧..................................

希望都是明示,没有暗示一个看似简单却迷惑的有关问题

//只是一个简单fix, 自己改进
bool shutdown = false;
unsigned int __stdcall ThreadFun(PVOID pM)
{
  int i=1;
  while (!shutdown && i<10000)
  {
    i=i+1;
    Sleep(100);
  }
  AfxMessageBox("执行完毕");
  return 0;
}
void CTest_WhileDlg::OnButton1() 
{
  HANDLE handle=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);
  CloseHandle(handle); //不要等待,也不要循环,只是简单的调度一下
}
//新加一个按钮,在关闭程序前, 关闭子线程
void CTest_WhileDlg::OnButton2() 
{
  shutdown = true;
}



------解决方案--------------------
void CTest_WhileDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    int i=1;
    MSG msg;
    while (i<10000)
    {
        i=i+1;
        Sleep(100);
        if (0==i%10)
        if (GetMessage(&msg,NULL,0,0)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
}