响应按扭点击消息开始循环,然后程序就无法响应了!解决办法

响应按扭点击消息开始循环,然后程序就无法响应了!

我的程序是单文档

我定义了两个按钮,在主框架类里响应按钮被单击

一个按钮Start   点此按钮则开始抓包循环

另一个按钮用来停止循环。但是

当我点击开始后,循环开始了,程序马上就无法响应了

我什么地方弄错了?

代码:

void   CMainFrame::OnBnClickedCapstart()
{
//   TODO:   Add   your   control   notification   handler   code   here
m_bIsCaprunning   =   true;
CWnd   *   pBut   =   m_wndDlgBar.GetDlgItem(IDC_CAPSTART);
CWnd   *   pButs   =   m_wndDlgBar.GetDlgItem(IDC_BUTTON_STOP);
   
pBut-> EnableWindow(   !m_bIsCaprunning   )   ;
pButs-> EnableWindow(   m_bIsCaprunning   )   ;

int   rst;
struct   pcap_pkthdr   *header;
const   u_char   *pkt_data;
time_t   localetime;
int   y   =   0;
CString   timestr;
CDC   *   txtdc   =m_pViewActive-> GetDC();

CaimspectorApp   *   papp   =   (CaimspectorApp   *)   AfxGetApp();  


while   (   m_bIsCaprunning   &&   (   rst   =   pcap_next_ex(   papp-> adhandle,   &header,   &pkt_data   )   )   > =   0   )

{
/*if   (!m_bIsCaprunning)
{
break;
}
*/

if   (   rst   =   0)
continue   ;
localetime   =   header-> ts.tv_sec   ;
CTime   tim   (localetime);
timestr   =   tim.Format( "%Y   %B   %d   %H:%M:%S ");
txtdc-> TextOut(0,y,timestr);
y   =   y+15;


}

}

void   CMainFrame::OnBnClickedButtonStop()
{
//   TODO:   Add   your   control   notification   handler   code   here
m_bIsCaprunning   =   FALSE;//停止循环
CWnd   *   pBut   =   m_wndDlgBar.GetDlgItem(IDC_CAPSTART);
CWnd   *   pButs   =   m_wndDlgBar.GetDlgItem(IDC_BUTTON_STOP);

pBut-> EnableWindow(   m_bIsCaprunning   )   ;
pButs-> EnableWindow(   !m_bIsCaprunning   )   ;
}


我的按钮是放在CdialogBar   上。

------解决方案--------------------
另开线程执行循环。
------解决方案--------------------
另开线程执行循环,只有一个线程时,程序一直在执行while循环,无法响应其他操作了。