为了让程序更好地工作,需要解决进程阻塞问题,因为程序阻塞后,将一直等待Trap的到来,在没有接收到Trap前,程序将不响应任何消息。这对我们来说是不能忍受的。解决的办法是采用多线程技术,即开始接收trap时,启动另一个线程专门用来接收trap,而程序界面不至于被“冻结”。
启动与关闭trap监听
void CSnmpMgrDlg::OnTrap() //onTrap是按钮的相应处理
{
CButton *pBt;
pBt=(CButton *)GetDlgItem(IDC_TRAP);
if(m_bRecvTrap==false)
{
if(pSnmp.sessionID==FALSE)
{
pSnmp.CreateSession(CSnmpMgrDlg::m_hWnd,wMsg);
pSnmp.sessionID=TRUE;
}
m_bRecvTrap=true;
AfxBeginThread(WorkerThreadProc,this,THREAD_PRIORITY_NORMAL,0,0,NULL); ///创建线程, 线程函数为WorkerThreadProc 参数为this指针。
pBt->SetWindowText("停止接收陷阱"); //修改按钮文字