我在一个对话框程序里隔10秒取次数据,
不是通过定时器来解决,而是Sleep(10000)。现在的情况是:若该程序窗口处于当前位置,则程序没问题
但我手动切换至其他窗口(比如打开IE上CSDN逛逛),再切回至该程序窗口时,
发现程序停止运行了,不知怎么解决。还有就是电脑自动锁屏后再解屏也是这种情况,不过这种可以设置电脑不锁屏来解决,
不知有什么其他好的方法没?

解决方案 »

  1.   

    Sleep()后面打个日志,看看线程正常着没。
      

  2.   

    你一直循环Sleep,没有处理窗口消息,窗口看上去就是“程序停止运行”了,改成用定时就没问题了。
      

  3.   

    主线程中Sleep会造成主线程堵塞,导致程序“假死”状态,建议周期性的动作采用工作线程或是定时器来完成
      

  4.   

    如果频繁让对话框获得焦点的话,会有很多不便,不知有好的方法没?我不是直接循环,具体实现是在对话框上设一按钮"取数据"
    OnBnClickedButtonGetdata()
    {
    //........省略
    m_dbSQLServerSelect.ExecuteCommand(true);            // 运行存储过程查询数据库
    int nCount = m_dbSQLServerSelect.GetRecordCount();   // 取出的数据数目
    if (nCount <= 0)
    {
    // 开启线程----模拟点击"取数据"按钮---里面设置暂停10秒
    AfxBeginThread(postMsgClickButtonGetData, "取数据",THREAD_PRIORITY_BELOW_NORMAL, 0, 0, 0);
    }
    else
    {
    //.........
    }
    }关于桌面屏保,隔10秒模拟移动鼠标一下,解决了
      

  5.   

    主线程阻塞,这个是正常的反映,如果要不死,用
    timer()