在线等啊!关于定时器OnTimer内部上加do..while(1);的执行问题
时间:2011-11-24
来源:互联网
{
// 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()?
第一次看到这种写法,有点疑惑,还请各位高手指点下!
作者: landyxin 发布时间: 2011-11-24
作者: mayudong1 发布时间: 2011-11-24
作者: oyljerry 发布时间: 2011-11-24
作者: weixiaoshashou 发布时间: 2011-11-24
执行语句中应该有情况Break跳出的吧。
作者: chenjiawei007 发布时间: 2011-11-24
定时器是回调,回调如果是单独线程,那这个线程就在做死循环了,不会有下次的ontime
执行语句中应该有情况Break跳出的吧。
我把代码贴出来
C/C++ code
int ret; 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吗?
作者: landyxin 发布时间: 2011-11-24
(上次OnTimer结束) && (cpu有时间) && (到了设定的时间)
才会进行下次ontimer
作者: Delphigis 发布时间: 2011-11-24
break;
这个break可以跳出整个循环体,其他的只能跳出switch语句……
作者: hedengxiang2011 发布时间: 2011-11-24
(上次OnTimer结束) && (cpu有时间) && (到了设定的时间)
才会进行下次ontimer
也就是说上次OnTimer()没有结束的话是不会响应其他消息,也不会再进入下一次OnTimer,是这样吗?
您帮我看一下我的代码
作者: landyxin 发布时间: 2011-11-24
作者: VisualEleven 发布时间: 2011-11-24
只要出不了while循环,你就没有做其它的操作
if (ret <= 0)
break;
唯一能出的应该就是这个语句了。
作者: landyxin 发布时间: 2011-11-24
又碰到一段这样的
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){}吧??
作者: landyxin 发布时间: 2011-11-24
{
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){}吧??
可以退出
作者: syxiyou 发布时间: 2011-11-24
作者: syxiyou 发布时间: 2011-11-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28