读书人

响应按扭点击消息开始循环然后程序就

发布时间: 2012-01-15 22:57:49 作者: rapoo

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

我的程序是单文档

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

一个按钮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循环,无法响应其他操作了。

读书人网 >VC/MFC

热点推荐