Actor架构的原始的Massage只有输入没有输出,这让我们使用者很不适应。NI官方的Actor架构白皮书上是这样解释的:(原文懒得找了,大意是)Massage就是没输出,使用者应该适应没有输出的编程方式,如果你实在想要输出就用队列传出来。
所以,如果你想使用带返回值的方法,在自动生成方法的Massage后,还应该对生成的Sendxxx.vi做如下改动:
原始的自动生成的Massage:
手动修改的更易使用的Massage:
我推荐的Actor带返回值方法的结构:注意,推荐结构除了对队列赋值外,也有正常的数据输出控件(IO.lvlib:IO)
我这里要着重说的是IO.lvib:IO这个控件,即使这个vi是靠队列返回数据的,但是有正常的输出控件。这样做的优势我来说明一下:
首先明确一点基本知识,在Actor架构中的消息(ReadIO.vi)中,不能向自身发送带返回值的消息,这样会导致程序卡死。原因很简单,当前类的Actor Core核心本质上是串行处理消息的,在处理ReadIO.vi时其他消息均无法执行,也就无法返回数据,从而形成互锁。