|
1.8.4 单元测试
在测试无人广角自动监控模块时曾出现数据无法传递的问题,为了解决这一问题,笔者仔细研究了传递值时的代码,发现原来逻辑上有错误,下面来看一下程序的原始代码。
void CAutodlg::OnTimer(UINT nIDEvent) { if(m_Time) { CTime time= CTime::GetCurrentTime(); m_StartTime.GetTime(starttime); m_StopTime.GetTime(stoptime); CCaptureDlg dlg; dlg.m_StopTime = stoptime; dlg.m_Time = m_Time; dlg.m_Num = m_Num; if(time == starttime) { OnOK(); KillTimer(1); } } CDialog::OnTimer(nIDEvent); }
| 在这段代码中,定义了一个CCaptureDlg类对象,然后进行赋值,看上去没有错误,可是为变量赋的值却无法传递到主窗口中,这是为什么呢?仔细看就会发现这里犯了一个逻辑上的错误,那就是定义的CCaptureDlg类对象和当前打开的主窗口并不是一个,所以在这里传递过去的值没有传递到主窗口中,而是传到了新建的CCaptureDlg类对象中。发现问题以后就好解决了,在主窗口调用无人广角自动监控模块时为相关变量赋值即可解决这一问题。代码如下:
void CCaptureDlg::OnAutomatism() { CAutodlg dlg; //CAutodlg类对象 if(dlg.DoModal()==IDOK) { DWORD threadID; m_hThread = ::CreateThread(NULL,0,ThreadProc,(LPVOID)this, 0,&threadID); //创建线程 m_Num = dlg.m_Num; m_Time = dlg.m_Time; if(m_Time) //判断是否定时监控 { m_StopTime = dlg.stoptime; //获得关闭时间 } } Invalidate(); //刷新窗口 }
| 上段代码中加粗的部分就是用来进行值传递的。
【责任编辑: 夏书 TEL:(010)68476606】
|