我做了个程序,我的想法是:当程序执行到某处时,暂停60秒,然后再继续往下执行,关键是在这暂停的60秒时间里,我想设置个倒计时器来显示这60秒时间,请问高手该如何实现呢?

解决方案 »

  1.   

    运行到需要暂停的地方设置Timer 一秒响应一次OnTimer
    在一个static中设置倒计时的数字 从60开始 响应一次OnTimer 减少一 
    当数字为零时继续向下执行另一种
    就是做一个for循环 循环60次
    没循环一次 sleep(1000)  一秒 
    不过这样会造成程序假死  可以考虑放到一个线程里面去
      

  2.   

    to:FireBirdCN
       请问如何设置一个Timer呢?是SetTimer(0, 1000, NULL);这样吗?但如何使它停在当前,执行倒计时呢?
      

  3.   

    SetTimer是用来启动时钟的 CWnd::SetTimerUINT SetTimer(UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer) (HWND, UINT, UINT, DWORD) );返回值:
    如果函数成功,则返回新定时器的标识符。应用程序可以将这个值传递给KillTimer成员函数以销毁定时器。如果成功,则返回非零值;否则返回0。参数: nIDEvent 指定了不为零的定时器标识符。  
    nElapse 指定了定时值;以毫秒为单位。  
    lpfnTimer 指定了应用程序提供的TimerProc回调函数的地址,该函数被用于处理WM_TIMER消息。如果这个参数为NULL,则WM_TIMER消息被放入应用程序的消息队列并由CWnd对象来处理。
     CWnd::OnTimerafx_msg void OnTimer( UINT nIDEvent );参数: nIDEvent 指定定时器的标识符。  说明:
    当在SetTimer成员函数中指定的每一个时间间隔都被用来安装一个定时器之后,框架调用这个成员函数。
    当在应用程序的消息队列中没有其它的消息时,Windows函数DispatchMessage发送一个WM_TIMER消息。
    注意 框架调用这个成员函数来使你的应用程序可以处理一个Windows消息。传递给你的函数的参数反映了在消息收到时框架收到的参数。如果你调用了这个函数的基类实现,这个实现将使用最初随着消息传递过来的参数,而不是使用你提供给函数的参数。在OnTimer下处理 倒计时功能 即刷新显示那个 static控件的显示
      

  4.   

    SetTimer这个方法我第一个就试了,可它没有暂停程序而继续往下执行了呀
      

  5.   

    我的想法是:当程序执行到某处时,暂停60秒,然后再继续往下执行
    ==========================================
    在消息驱动的window下这种想法本身就不合理
      

  6.   

    用时钟确实麻烦些 还要加bool判断 用Sleep吧for(int i=60;i>=0;i--)
    {
       m_strinfo.Format("%d",i);//m_strinfo关联一个static控件 CString类型
       UpdateData(FALSE); 
       Sleep(1000);
    }
    只是这个时候 程序是处于假死状态的
      

  7.   


    添加一个WM_TIMER消息
    用一个函数SetTimer(1,1000,NULL);在开始进入倒计时的事件中添加!
    第一个参数表示标示符,第二个时间间隔/ms,第三个回调函数,
    然后在事件响应函数中加一个如下代码:
    void CSetTimerDlg::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    if(1==nIDEvent)
    {
    i--;
    CString str;
    str.Format("%d",i);
    m_Timer=str;
    UpdateData(FALSE);
    }
    CDialog::OnTimer(nIDEvent);
    }
    便可以出现一个倒时间!
      

  8.   

    是吗?我的想法说白了就是个倒记时器的问题,打个比方吧:当执行到某处时提示60秒后退出,然后显示这60秒的倒记时,这样不合理吗?
    ===================
    如果是想执行到60秒后退出,然后显示倒计时并不难,直接用定时器,隔一秒输出一次,同时加一个全局变量,此时设这个变量为TRUE,而所有的用户的输入的消息处理函数中根据这个变量的值做相应处理,发现为TRUE时,这些消息处理函数就什么都不做。
      

  9.   

    for(int i=60; i>0; i--)
    {
      Sleep(1000);
      Display();
    }未编译,参考吧。
      

  10.   

    //当程序执行到某处时,暂停60秒
    SetTimer(1,1000,NULL) ;   //启动倒计时定时器//在OnTimer中
    Static int ntime = 60 ;  //倒计时开始数值
    CString strtime ;  //记录倒计时数值的字符串if(ntime>=0)  //如果倒计时没结束
    {
        strtime.Format("%d",ntime) ;
        GetDlgItem()->SetWiIDC_STATIC_TIMEndowText(strtime) ;  //IDC_STATIC_TIME为显示倒计时的静态文本控件
        ntime-- ;

    else  //倒计时结束
    {
        ...  //60秒结束后要执行的操作放在这里
    }//上面只是个想法,没测试,楼主可以试试