首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++定时扫描解决思路

2012-07-29 
C++定时扫描小弟接触C++没多久,这几天在做Wifi信号扫描程序时遇到麻烦了,请各路大侠不吝赐教:程序要求是每

C++定时扫描
小弟接触C++没多久,这几天在做Wifi信号扫描程序时遇到麻烦了,请各路大侠不吝赐教:
  程序要求是每隔1s扫描一次,并把扫描结果显示在CtrlList控件中。我用SetTimer()定时器做了(因为这好像简单些),结果也能跑,但问题是程序跑了一段时间(大约是扫描了128次)后就停下来了,而且再次按“扫描”按钮也没用,我想让它一直跑下去,有什么解决办法?

附:
我的“扫描”按钮代码和OnTimer()函数代码如下:
void CmyWifiDlg::OnBnClickedButtonScan()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(1000,800,NULL);//ID为1000,间隔为800ms
}

void CmyWifiDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch(nIDEvent)
{
case 1000:
m_ListWifi.SetRedraw(FALSE);//CtrlList控件
EnumInterface();//实现扫描的主要函数
m_ListWifi.SetRedraw(TRUE);
m_ListWifi.UpdateWindow();
break;
default:
break;
}

CDialog::OnTimer(nIDEvent);
}

多谢各位大侠了!!!

[解决办法]
程序本身看不出什么问题,可能和EnumInterface()的具体实现有关,实际上也可以用另外的解决方案,就是单独写一个扫描的线程,用一个无限循环来实现重复扫描:
while ( !Terminate ) {
ScanWifi();
Sleep(1000);
}
[解决办法]
加断点看看是什么问题。确定是否定时器被关闭了。
[解决办法]

C/C++ code
UINT nTimer;void CmyWifiDlg::OnBnClickedButtonScan(){    // TODO: 在此添加控件通知处理程序代码    nTimer=SetTimer(1000,800,NULL);//ID为1000,间隔为800ms}void CmyWifiDlg::OnTimer(UINT_PTR nIDEvent){    // TODO: 在此添加消息处理程序代码和/或调用默认值    switch(nIDEvent)    {    case 1000:        KillTimer(nTimer);        m_ListWifi.SetRedraw(FALSE); //CtrlList控件        EnumInterface(); //实现扫描的主要函数        m_ListWifi.SetRedraw(TRUE);        m_ListWifi.UpdateWindow();        nTimer=SetTimer(1000,800,NULL);//ID为1000,间隔为800ms    break;    default:    break;    }}CDialog::OnTimer(nIDEvent); }
[解决办法]
计时器一旦SetTimer,在KillTimer之前会一直运行
扫描128次后就失效,更大的可能是你的EnumInterface()函数有问题,只能运行128次
自己在OnTimer内加个计数,在计数上下断点,看看计时器能否运行到第200次,如果能,那问题就很明显了
[解决办法]
探讨

zhao4zhong1大哥的方法也不管用啊,还是跟原来的情况一样,跑着跑着程序就停下了,不再相应WM_TIMER消息了。。。。。。。。。。啊,头要爆了~~~~~~~~~~~~~

热点排行