就像我在上周提到的,我最近跟Picture控件交往甚密。有一天,我在调试一个我以为是竞争条件引起的错误很长一段时间,但是最后,我发现我的代码其实是没问题的。出现这种情况主要是因为我对LabVIEW的一个怪癖不甚了解而导致的。

       你是否曾经注意过控件中有一个“Synchronous Display”选项?你可以通过右键点击控件并选择“Advanced”来找到它。当然,我记得8年前我第一次学LabVIEW的时候,我曾经注意过这个选项,我也曾经置疑过这个到底是什么,但是却没有花过时间去好好研究一下。当然,LabVIEW帮助文档对它有个非常详细的解释,并且最终解决了我的问题。

       总的说来,所有的控件缺省都设为Asynchronous Display……换句话说,“Synchronous Display”选项原先是没有被选择的。这也就意味着,当你给LabVIEW控件一个新的值时(通常是通过控件终端或者局部变量),只要能找到机会(比 如,每当用户界面线程得到机会运行时),它就会自动在前面板对象中更新最近的一个值。换句话来说,有一些更新可能从来就没有发生过。但是,如果你选择 Synchronous Display的话,你就迫使LabVIEW在每次值改变时都会立即更新控件。有一种简单的方法可以看到这两者的不同之处,创建一个包含一个运行 10000次的For循环的VI,然后将计数终端连在一个数值显示控件中。运行该VI……可以看到该VI运行得很快;现在右键控件并选择 Advanced>Synchronous Display,再次运行后,你会发现需要更长的时间,这是因为你迫使了LabVIEW在每次值发生改变的时候,去更新一下显示控件。