求助:这个逻辑的c++实现?

weixin_42134684 2019-06-19 08:50:31
想实现一个逻辑:
while下多个if分支

while(true)
{
dosomething;//会改变以下if的条件

if(...){dosth;continue;}
if(...){dosth;continue;}
if(...){dosth;continue;}
...

Sleep(5);
}
我的需求:某次循环命中一条if后,下次循环要再次命中同一if。
ps:因为dosomething,if条件会有变化,如何锁定上一次命中的if,避免被别的if命中呢?
各种方法不限,用C++就行,新手求助
...全文
4713 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
還是 2019-06-25
  • 打赏
  • 举报
回复
你要把改变条件的实现放在每个if中,这是状态机的简单实现. 在if中判断具体下一步到那个if中, i = 0 if (i == 0) { i = 1; } else if( i == 1) { i = 2; } ... 即在一个if状态中确定下一状态
weixin_42134684 2019-06-25
  • 打赏
  • 举报
回复
谢谢各位的回复,我是用7楼的手段解决的
凤凰居士 2019-06-21
  • 打赏
  • 举报
回复
函数指针 if(assinged)*ptr(); else if(){ptr=dosth1;assinged=true;continue;} 大致这个意思
  • 打赏
  • 举报
回复
dosomething会改变条件 那么if(....)中的 dosth 必须要是 undosomething 才可以,保证下次循环仍然命中,当然这个undosomething只是对于影响判断条件的语句来说的哈。
super_admi 2019-06-19
  • 打赏
  • 举报
回复
看了半天,没搞懂楼主想说什么。

如果按你最初的说法,纯粹是一个条件判断和循环的嵌套之争,在于谁嵌套谁的问题,这个问题基本无解的;

但看你后续的补充说明,感觉第一次进入 if step 2 执行之后,下一个循环如果 step == 1,则需要同时执行 step 1和 step 2后面的语句,而再下次循环,如果step == 3,则需要同时执行 step 1 和 step 3 后面的语句,是这样么?
赵4老师 2019-06-19
  • 打赏
  • 举报
回复
Do not let me think!
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 21 楼 赵4老师 的回复:
int s=0;
while (true)
{
dosomething;//会改变以下if的条件
switch (s) {
case 0:if(...){s=0;dosth;continue;}
case 1:if(...){s=1;dosth;continue;}
case 2:if(...){s=2;dosth;continue;}
...
}
Sleep(5);
}

膜拜赵老师
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 22 楼 sdghchj 的回复:

std::function<void(void)> dowork = nullptr;

while(true)
{
dosomething;//会改变以下if的条件

if (dowork != nullptr){
dowork();
}else{
if(...){dowork=[&](){ dosth; };continue;}
if(...){dowork=[&](){ dosth; };continue;}
if(...){dowork=[&](){ dosth; };continue;}
}


...

Sleep(5);
}


谢谢您演示了回调函数的用法
sdghchj 2019-06-19
  • 打赏
  • 举报
回复

std::function<void(void)> dowork = nullptr;

while(true)
{
dosomething;//会改变以下if的条件

if (dowork != nullptr){
     dowork();
}else{
    if(...){dowork=[&](){ dosth; };continue;}
    if(...){dowork=[&](){ dosth; };continue;}
    if(...){dowork=[&](){ dosth; };continue;}
}


...

Sleep(5);
}

赵4老师 2019-06-19
  • 打赏
  • 举报
回复
int s=0;
while (true)
{
dosomething;//会改变以下if的条件
switch (s) {
case 0:if(...){s=0;dosth;continue;}
case 1:if(...){s=1;dosth;continue;}
case 2:if(...){s=2;dosth;continue;}
...
}
Sleep(5);
}
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 18 楼 android2008 的回复:
想项目 =》 小项目
关于程序框架,有专门的教程吗
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 17 楼 android2008 的回复:
[quote=引用 16 楼 weixin_42134684 的回复:]
[quote=引用 15 楼 android2008 的回复:]
通信程序还是维护一些state比较好,代码好理解
state = STATE_0
while(True)
{
//do something
switch(state):
{
case STATE_0:
//process state 0
break;
case STATE_1:
//process state 1
....
}
}

把那些if else挪到 STATE_0的处理函数里去,代码可能有重复,但逻辑会更清晰

只可惜不是单纯的处理通讯字段 -_-^,要结合通讯的字段加一些处理,形成的这些N个条件[/quote]

想项目无所谓,大项目的化必须有好的架构,否则后面没法维护

做过的2G/3G/4G通信协议的平台都是靠维护一堆状态机的。[/quote]
嗯,您说的对我非常有帮助,谢谢
android2008 2019-06-19
  • 打赏
  • 举报
回复
想项目 =》 小项目



android2008 2019-06-19
  • 打赏
  • 举报
回复
引用 16 楼 weixin_42134684 的回复:
[quote=引用 15 楼 android2008 的回复:]
通信程序还是维护一些state比较好,代码好理解
state = STATE_0
while(True)
{
//do something
switch(state):
{
case STATE_0:
//process state 0
break;
case STATE_1:
//process state 1
....
}
}

把那些if else挪到 STATE_0的处理函数里去,代码可能有重复,但逻辑会更清晰

只可惜不是单纯的处理通讯字段 -_-^,要结合通讯的字段加一些处理,形成的这些N个条件[/quote]

想项目无所谓,大项目的化必须有好的架构,否则后面没法维护

做过的2G/3G/4G通信协议的平台都是靠维护一堆状态机的。
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 15 楼 android2008 的回复:
通信程序还是维护一些state比较好,代码好理解
state = STATE_0
while(True)
{
//do something
switch(state):
{
case STATE_0:
//process state 0
break;
case STATE_1:
//process state 1
....
}
}

把那些if else挪到 STATE_0的处理函数里去,代码可能有重复,但逻辑会更清晰

只可惜不是单纯的处理通讯字段 -_-^,要结合通讯的字段加一些处理,形成的这些N个条件
android2008 2019-06-19
  • 打赏
  • 举报
回复
通信程序还是维护一些state比较好,代码好理解
state = STATE_0
while(True)
{
//do something
switch(state):
{
case STATE_0:
//process state 0
break;
case STATE_1:
//process state 1
....
}
}

把那些if else挪到 STATE_0的处理函数里去,代码可能有重复,但逻辑会更清晰
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 13 楼 android2008 的回复:
[quote=引用 12 楼 weixin_42134684 的回复:]
[quote=引用 11 楼 android2008 的回复:]
用switchcase肯定比用if else好,所以我上面没有写if else,当然用查表可能更简洁。
可能你的项目的框架需要改进,现在这样的实现确实挺怪的

查表是指什么呢,能解释下吗[/quote]
查表代码好看,但维护会麻烦一些,还是switchcase可读性好[/quote]
嗯。先用您的逻辑实现。至于程序框架是不是需要回调函数改进,不会用,先去研究下
android2008 2019-06-19
  • 打赏
  • 举报
回复
引用 12 楼 weixin_42134684 的回复:
[quote=引用 11 楼 android2008 的回复:]
用switchcase肯定比用if else好,所以我上面没有写if else,当然用查表可能更简洁。
可能你的项目的框架需要改进,现在这样的实现确实挺怪的

查表是指什么呢,能解释下吗[/quote]
查表代码好看,但维护会麻烦一些,还是switchcase可读性好
weixin_42134684 2019-06-19
  • 打赏
  • 举报
回复
引用 11 楼 android2008 的回复:
用switchcase肯定比用if else好,所以我上面没有写if else,当然用查表可能更简洁。
可能你的项目的框架需要改进,现在这样的实现确实挺怪的

查表是指什么呢,能解释下吗
android2008 2019-06-19
  • 打赏
  • 举报
回复
用switchcase肯定比用if else好,所以我上面没有写if else,当然用查表可能更简洁。
可能你的项目的框架需要改进,现在这样的实现确实挺怪的
加载更多回复(11)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧