MFC对话框假死,求单线程解决方案,各位大神

MFC对话框假死,求单线程解决方案,求助各位大神
有个程序,需要执行数千次循环,而且每次循环都要处理大量的读数据和筛选数据,因此比较消耗CPU和内存。
在程序运行过程中,一旦做其他的任何操作,如按键盘,或者鼠标单击或试图拖动对话框到任何地方,该程序就会假死,对话框除了标题栏外就白屏了。
而程序运行结束后,假死状态也就恢复正常了。

 for(int i=0;i<CNCdata2.lnum;i++)
{


pDC->MoveTo((int)(rect.right/2-CNCdata1[i].X),(int)(rect.bottom/2-CNCdata1[i].Y));
int i1=i+1;
pDC->LineTo((int)(rect.right/2-CNCdata1[i1].X),(int)(rect.bottom/2-CNCdata1[i1].Y));
Sleep(30);
 
  UpdateWindow();}


  循环过程中添加PeekMessage()函数来处理消息:
  MSG msg;
  while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
  ::TranslateMessage(&msg);
  ::DispatchMessage(&msg);
  }

也不能解决 循环就卡住不动了,页面也卡了,求助各位大神

------解决方案--------------------
onbtnrun里,
if(checkbox==1)
{
执行循环:画图
}
else{加工};

问题在于:
执行循环:画图
不知道checkbox==1,何以退出?
PeekMessage后要检测checkbox==1?
你的逻辑好像有问题!