问一个程序优化的问题, if...else if...过多如何优化?

wit_scuec 2011-03-12 02:30:58
下面直接帖代码:
/********************************************************************
函数功能:蠕动泵状态控制函数
入口参数:无
返 回:无
备 注:m_State == 1 ,蠕动泵正转,m_State == 2,蠕动泵反转
sleeptime 为蠕动泵转动时间,m_tSpeed为转速
********************************************************************/
void PumpOperate()
{
if((m_State == 1) && (m_tSpeed == 1))
{
fSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 1))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 2))
{
fSendData(2);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 2))
{
rSendData(2);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 3))
{
fSendData(3);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 3))
{
rSendData(3);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 4))
{
fSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 4))
{
rSendData(4);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 5))
{
fSendData(5);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 5))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 6))
{
fSendData(6);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 6))
{
rSendData(6);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 7))
{
fSendData(7);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 7))
{
rSendData(1);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 8))
{
fSendData(8);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 8))
{
rSendData(8);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 9))
{
fSendData(9);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 9))
{
rSendData(9);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 1) && (m_tSpeed == 10))
{
fSendData(10);
Sleep(sleeptime);
ShutPump();}
else if((m_State == 2) && (m_tSpeed == 10))
{
rSendData(10);
Sleep(sleeptime);
ShutPump();}

else if .........
如下省略N(N > 100)组判断条件

这段程序是通过操控面板上面的按键的状态和一个静态文本框中由用户输入的速度参数值来作为判断条件,决定如何传递速度控制参数和转动时间,分别为 rSendData (),和Sleep()函数。由于实际应用时候整个速度参数有1到100,并有正反转情况,那么总共有200组参数,如果采用if else判断,当if else 过多时候,会出现嵌套过深的错误,向大家请教如何做优化!
...全文
1070 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wit_scuec 2011-11-23
  • 打赏
  • 举报
回复
今天结另外一个帖子才发现快一年前的帖子还没结,哎。。。失误失误,最后采用的是switch结构。
一条晚起的虫 2011-08-29
  • 打赏
  • 举报
回复
// switch比较简单。也可以用表驱动
switch(m_tSpeed)
{
case 1:
//...
break;
case 2
swicht(m_state)
}

// 而且看lz的代码,除了else if((m_State == 2) && (m_tSpeed == 1))这个条件外,其他的都是m_tSpeed等于多少,fSendData()的参数就是多少
xuminglong 2011-08-26
  • 打赏
  • 举报
回复
楼主搜索:设计模式 状态模式。再多的状态都木问题。
  • 打赏
  • 举报
回复
感觉楼主只用到了m_tSpeed 来判断rSendData,而m_State 并没有起到关键作用啊
还没想好 2011-04-02
  • 打赏
  • 举报
回复
表驱动。 请翻阅 代码大全 一书,里面有示例。
cacker58 2011-03-31
  • 打赏
  • 举报
回复
第一种方法
if(m_State == 1 )
...switch

else
... switch

其实switch就是在做表 唯一方便就是添加代码 比较方便

还有一种就是做映射表 虽然也很好 但感觉添加起来 比较麻烦

建议第一种

如果非要第2种 可以考虑MFC消息映射的思路 比用两层结构 一层结构即可
lazy_2010 2011-03-31
  • 打赏
  • 举报
回复
#8 的办法是个好办法
hunter0395 2011-03-31
  • 打赏
  • 举报
回复
做一个控制矩阵,其实是函数指针数组。
state做行索引,speed做列索引,元素为对应函数名。
buffaloox 2011-03-25
  • 打赏
  • 举报
回复
你想优化什么?如果是程序结构的话,可以用switch,看上去整洁点。
但是执行效率没有if else高

linanab 2011-03-25
  • 打赏
  • 举报
回复
多分枝的情况就用switch,结构清晰得多的~~
fangchao918628 2011-03-17
  • 打赏
  • 举报
回复
http://www.cnblogs.com/MichaelPeng/archive/2010/12/02/1893999.html
上面是读金山安全卫士的想法,上面有说if else过多的情况,说用表驱动
winingsky 2011-03-17
  • 打赏
  • 举报
回复
考虑switch
shenyi0106 2011-03-17
  • 打赏
  • 举报
回复
do
{
if(!something)break;
......
}while(FALSE);
alieenyaya 2011-03-17
  • 打赏
  • 举报
回复
switch,然后把几种状态做下枚举类型
副组长 2011-03-12
  • 打赏
  • 举报
回复
同意3楼,列表检索。
这种成百上千的组合分支,switch和if else都不好。
不光是性能,大长尾巴代码看起来也不清楚。
ok1234567 2011-03-12
  • 打赏
  • 举报
回复
lz的情况用两层switch...case即可
if ... else 的嵌套极限应该只有128层
fishion 2011-03-12
  • 打赏
  • 举报
回复
不知道你的m_State m_tSpeed 取值范围是多少,如果不大的话,可以例如WORD类型的变量中,低位存m_State,高位存m_tSpeed.
这时再用switch
用户 昵称 2011-03-12
  • 打赏
  • 举报
回复
这不是挺好嘛,一看就明白了。
向立天 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]

那就用switch结构啊
[/Quote]统一
switch比合适
Devil26 2011-03-12
  • 打赏
  • 举报
回复
if(m_state==1)
{
for(int i=1;i<=N;i++)
{
……好像有规律
}
}
else if(m_state==1)
{
for(int i=1;i<=N;i++)
{
if(m_tSpeed==……)//(把几个特殊的判断下)
……好像有规律
}
}
加载更多回复(7)

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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