在C#中具有延迟输入的AND门

时间:2010-07-28 16:05:48

标签: .net boolean

我正在尝试使用多个输入实现布尔AND门。每个输入都有一个标识它的整数。输入信号随机到达,并存储在门中(因此它不是纯AND门,而是具有延迟输入的门)。只有当所有输入信号都到达时,门才会启动 注意:到达同一输入的2个信号不算作两个。

我想我会创建一个存储输入的字典,当刺激到达时,更新特定输入的Id键的值,然后是AND所有值。如果结果为1,则触发门并将字典的所有值重置为0并再次等待。

我的方法听起来不对劲,我觉得必须有更优雅和高效的东西(.Net)。

4 个答案:

答案 0 :(得分:3)

我可能有点偏离基础,但这看起来像Rx Framework非常适合。通过这种方式,您可以转换为纯粹的反应式编程,您可以声明在收到所有输入之前不会发送输出。对于外部消费者,您的门将作为IObservable<bool>运行,这有点等同于IEnumerable<bool>。任何观察者只会看到输出的枚举,这会延迟输入的输入。

这里的主要好处是你可以链接observables。因此,如果您想将AND门的输出链接到OR门的输入,您可以使用一行代码来实现。对我来说,Rx是建模电路如何工作的完美框架,因为每个可观测量的结果在下一个可观测量的输入中起作用。

要开始使用,我建议您在Channel9上查看series of videos

答案 1 :(得分:1)

如果输入ID是顺序输入,则可能使用bool []而不是字典。

   bool[] inputs = new bool[10];

   void SetInput(int id, bool val)
   {
       inputs[id] = val;
   }

   bool trigger()
   {
        return inputs.All(b => b);
   }

   void reset()
   {
        Array.Clear(input, 0, inputs.Length);
   }

答案 2 :(得分:1)

我不需要存储输入信息。 只要信号到达,只需检查它是否为零,确保结果为零。如果是一个,不做任何具体的事情。然后你只需要检查所有输入信号是否都已到达。

答案 3 :(得分:0)