【问题标题】:How to "join threads" with Lego Mindstorms NXT default "LabVIEW" code如何使用 Lego Mindstorms NXT 默认的“LabVIEW”代码“加入线程”
【发布时间】:2014-04-11 01:12:04
【问题描述】:

简单地说,我想并行操作两个电机,然后当两个都准备好后,继续执行第三个线程。

下面是我现在拥有的图像。在两个顶级线程中,它将电机 B 和 C 设置为“无限”,然后等待直到两者都触发开关,然后为两者设置一个单独的布尔变量。

然后在第 3 个线程中,我以 1 秒的间隔轮询这两个变量,直到 AND 操作使循环终止条件为真。

这是嵌入式系统,所以在这里可能没问题,但是在“PC编程”中,这种轮询循环将是相当可怕的事情。

问题:我可以两者都做

  • 等待没有这种轮询循环的变量?
  • 等待线程完成而不使用变量?

【问题讨论】:

    标签: multithreading wait nxt mindstorms


    【解决方案1】:

    您的问题对于您实际想要实现的目标和使用哪种语言有点模糊。据我了解,您希望能够在 Labview 中实现类似的多线程电机控制机制?

    如果是这样,那么你的两个问题的答案都是肯定的,你可以在没有明确定义的变量的情况下实现等待(除了错误集群,你可能无论如何都会传递它)。最简单的方法是将错误集群传递给两个循环,然后在循环完成后使用合并错误来组合生成的错误。合并错误将等到两个输入都有数据,合并错误,然后传递合并的错误集群。通过将合并的错误集群连接到您的拆卸功能,您可以有效地实现您描述的线程同步。如果您需要两个控制循环的线程同步,您仍然必须使用信号量、集合点、通知器和其他内置同步方法。

    图中有一个初始化函数,它打开两个串行设备(紫线)并将它们传递给控制回路,这两个回路都会运行直到发生错误(黄黑线)。两者的错误被合并并传递给释放串行设备的拆卸函数。请注意,在这个特定示例中,只要每个循环至少有一根线连接到拆卸函数,同步就会在程序结束时发生。

    基于文本的编程语言中的类似功能需要使用更精细的机制,尽管一些用于并行编程的专用语言可能会有所帮助。

    【讨论】:

    • 感谢您的回答。不幸的是,Mindstorms NXT IDE 似乎没有这个(我稍后会仔细检查),但这看起来就像我想要一个工作解决方案的样子。澄清一下,这个问题不是关于“普通”LabVIEW的,稍微编辑一下让它更清楚。
    • 啊,好吧,你可能仍然可以使用这种方法:只需将一根线从两个工作循环传递到最后一个循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多