1

简而言之,我想并行操作两个电机,然后当两个电机都准备好时,继续执行第三个线程。

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

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

3 个线程

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

问题:我可以两者都做吗

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

1 回答 1

0

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

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

非常简单的线程同步

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

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

于 2014-03-15T10:21:59.593 回答