响应按扭点击消息开始循环,然后程序就无法响应了!解决办法
响应按扭点击消息开始循环,然后程序就无法响应了!
我的程序是单文档
我定义了两个按钮,在主框架类里响应按钮被单击
一个按钮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循环,无法响应其他操作了。
我的程序是单文档
我定义了两个按钮,在主框架类里响应按钮被单击
一个按钮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循环,无法响应其他操作了。