c++延时中执行任务

在一次项目过程中,当执行一个任务前,需要暂停一段时间,该时间可配置,在暂停的过程中,需要接收相关的命令,比如终止、暂停、继续命令。
如果用类似的库函数sleep并不能解决该问题,那么就需要用到while循环这样的暂停模式。无论是sleep还是while的方式程序都是阻塞的。实现方式如下所示。

    time_t start_time, cur_time;
    time(&start_time);
    do
    {
    } while((cur_time - start_time) < CGDManager::GD_EXE_STEP_DELAY);

有了while循环,便可以在这个循环里处理消息,例子如下:

    time_t start_time, cur_time;
    time(&start_time);
    do
    {

        CHAR*   m_buf = (CHAR *)malloc(8);
        struct  gd_buf_head a ;

        if( (m_sysinfo->receive_message(a,m_buf)>=0) )
        {

            if( a.reponse_type == GD_REPORT_FRONT)
            {


                 GetBuffer  gBuf;
                   gBuf.set_buf_byte_order(a.rhead.byte_order);
                 CHAR type ;
                 CHAR *ptr = m_buf;
                 ptr += sizeof(INT32);

                 ptr += sizeof(CHAR);

                 memcpy((CHAR*)&type, ptr, sizeof(CHAR));
                 ptr += sizeof(CHAR);
                 if( type == GD_STOP_CMD_TYPE)
                 {
                     m_bKill = TRUE ;
                     ReportProcess(a,m_buf);//处理消息函数
                     free(m_buf);
                     m_buf = NULL;
                     return -1;
                 }
                 if( type == GD_PAUSE_CMD_TYPE )
                 {
                     MakeReport(2,type,0,CK_RUSULT_OK);//发送确认报文
                     free(m_buf);
                     m_buf = NULL;

                     m_bPause = true ;
                     m_iExecTimeout = 0;
                     m_iResultTimeout = 0;
                     m_iCheckTimeout = 0;

                     m_iCkStatus = GD_STATUS_WAIT_CONTINUE;
                     m_iPauseTimeout = CGDManager::GD_DEMO_EXE_TIMEOUT;

                     return -1;
                 }
                 if( type == GD_CONTINUE_CMD_TYPE )
                 {
                     ReportProcess(a,m_buf);
                     free(m_buf);
                     m_buf = NULL;
                     return -1;
                 }

            }
        }

        free(m_buf );
        m_buf = NULL;
        time(&cur_time);
    } while((cur_time - start_time) < CGDManager::GD_EXE_STEP_DELAY);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值