void CDc_clientDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == PERIOD_TIMER_ID) //如果是定时器1
{
//执行操作
。//省略
do { //......执行部分省略 } while (1); //在这死循环了?
} CDialog::OnTimer(nIDEvent);
}代码如上,我想问题下,MFC里启动定时器后,进入OnTimer时,这个do..while(1);是一直在执行不退出了吗?
还是下次定时时间到,再重新进入Ontimer重新执行一次OnTimer()?
第一次看到这种写法,有点疑惑,还请各位高手指点下!
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == PERIOD_TIMER_ID) //如果是定时器1
{
//执行操作
。//省略
do { //......执行部分省略 } while (1); //在这死循环了?
} CDialog::OnTimer(nIDEvent);
}代码如上,我想问题下,MFC里启动定时器后,进入OnTimer时,这个do..while(1);是一直在执行不退出了吗?
还是下次定时时间到,再重新进入Ontimer重新执行一次OnTimer()?
第一次看到这种写法,有点疑惑,还请各位高手指点下!
执行语句中应该有情况Break跳出的吧。
struct dc_msg msg; //执行操作
do
{
ret = dcc_msg_receive(m_DccHdl, &msg); //接收数据,存入msg结构体 if (ret <= 0) //如果返回值<=0,连接出错/需要再尝试,需要把此连接 dcc_close()然后再重新用 dcc_init()退出
break; switch (msg.msg_type)
{
case DC_MSG_DATA:
PrintModData(&msg, PRINT_MODE_RECEIVE);
break; case DC_MSG_ONLINE:
case DC_MSG_OFFLINE:
PrintOnOffMsg(&msg); //打印在线状态
break; case DC_MSG_SENDRESULT:
PrintSendResultMsg(&msg);//打印发送状态
break; case DC_MSG_STATUSRESULT:
PrintStatusResultMsg(&msg);//打印状态结果,包含"不存在,上线,下线"
break; case DC_MSG_AT_CMD:
if (m_pSendATCmdDlg != NULL)
m_pSendATCmdDlg->PostMessage(DC_WM_CMP_AT_RESULT, NULL, (UINT)msg.msg_body); //PoseMessage给“远程固件更新”对话框
break;
default: /* Not defined! */
break;
} } while (1); //在这死循环了?
里边的break只是跳出switch吧?也能跳出while吗?
(上次OnTimer结束) && (cpu有时间) && (到了设定的时间) 才会进行下次ontimer
break;
这个break可以跳出整个循环体,其他的只能跳出switch语句……
您帮我看一下我的代码
if (ret <= 0)
break;
唯一能出的应该就是这个语句了。
又碰到一段这样的
while (1)
{
if (dcc_msg_send(m_DccHdl, &msg) > 0) //发送成功
{
//PrintModData(&msg, PRINT_MODE_SEND);
ret = TRUE;
break;
}
else
{
if (IDCANCEL == AfxMessageBox(IDS_SEND_FAILED, MB_RETRYCANCEL|MB_ICONINFORMATION|MB_DEFBUTTON2))
ret = FALSE;
break;
}
}
上面的break应该能退出while(1){}吧??
{
if (dcc_msg_send(m_DccHdl, &msg) > 0) //发送成功
{
//PrintModData(&msg, PRINT_MODE_SEND);
ret = TRUE;
break;
}
else
{
if (IDCANCEL == AfxMessageBox(IDS_SEND_FAILED, MB_RETRYCANCEL|MB_ICONINFORMATION|MB_DEFBUTTON2))
ret = FALSE;
break;
}
}
上面的break应该能退出while(1){}吧??
可以退出