我的老师要求我们设计一个红绿灯应用程序.该应用程序将有三个按钮:
>开始:开始红绿灯.当我们按下按钮时,我们看到红色圆圈,看到绿色圆圈后2秒,看到橙色圆圈0.4秒后3秒,然后我们看到红色圆圈,我们再次重复相同的事情.
>停止:我们看到白色圆圈
>击穿:在这种模式下,我们看到橙色圆圈持续0.5秒,然后是白色圆圈持续0.6秒,再次看到橙色圆圈.
第一个问题是我们应该使用多少计时器.我回答说我们只能使用一个定时器,每0.1秒发布一次事件.老师说这是一个坏主意,我们应该使用5个定时器.他说如果我在我的机器上启动许多程序(重载),我将遇到问题.
为什么我的解决方案不好?使用多个计时器不会使解决方案复杂化?
编辑:
他说我们需要5个计时器,因为有5个事件(从红色变为绿色,绿色变为橙色,橙色变为红色,橙色变为白色,白色变为橙色).他说,如果我们添加更多颜色,我们还会添加定时器.
这是它的逻辑:
timer1 has interval of 2 seconds
timer2 has interval of 3 seconds
timer3 has interval of 0.4 seconds
timer4 has interval of 0.5 seconds
timer5 has interval of 0.6 seconds
在启动时只启用timer1,当它发布一个事件时我们将圆圈的颜色从红色变为绿色我们禁用timer1并启动timer2
当timer2发布事件时,我们将圆圈的颜色从绿色更改为橙色.我们禁用timer2,然后启动timer3.
当timer3发布一个事件时,我们将圆圈的颜色从橙色更改为红色.我们禁用timer3,然后启动timer1.
当我们处于故障模式时,我们应用相同的逻辑.
最佳答案 这里的标准智慧是,如果您正在编写控制交通灯的计算机程序,您:
>使用最简单的逻辑,以便确定在所有情况下都能正常运行
>除了控制交通灯外,不要使用这台电脑做其他事情.
程序复杂性的增加通常不会导致可预测的行为. (它会导致更多错误.)
所以标准的智慧会说使用1个计时器,因为它更可能是健壮的.
timer1 has interval of 2 seconds timer2 has interval of 3 seconds timer3 has interval of 0.4 seconds timer4 has interval of 0.5 seconds timer5 has interval of 0.6 seconds
我不是多线程的专家,但假设每个计时器都是一个线程,我怀疑这会导致更精细的计时.这要求线程调度程序进行更多的上下文切换.我们现在有5个单独的上下文,而不是1,需要注意颜色变化是准确的.任何一个计时器在需要触发的点切换到的概率较低.
在最糟糕的情况下,假设timer3在触发时被忽略0.11秒,你可能会出现乱序颜色.现在,计时器还需要相互通信以确保我们的预期行为.由于引入的复杂性,我们必须再次增加复杂性以防止错误.