昨日在《学习LabVIEW(二)——操作.NET泛型类》给出的代码,实际上是有过错的。依照咱们的想象,首要调用了Add,将Key-Value对“eleven”-11放入了Dictionary中,然后调用TryGetValue,查找Key: “eleven”对应的Value。所以查询必定应该是成功的。可是,重复履行昨日的代码,偶然会呈现查询失利的状况,如下图所示:
分明现已用Add添加了Key: “eleven”,为什么有时候会查询失利呢?原因在于咱们使用了过错的观念编写LabVIEW程序。
传统的计算机言语,本质上以指令的活动为中心编写代码,写出来的代码依照次序被一条一条履行。可是像LabVIEW和Simulink这样的图形化编程言语,是以数据的活动为中心结构程序的。当程序以数据的活动为中心结构时,有时指令的履行先后次序就不那么显着了,甚至在不知不觉中一些指令会主动的被并行化履行。关于这一点我从前咨询过NI的客服,他们曾清晰表明过,LabVIEW的运行时内部会主动使用多线程来处理能够并行履行的函数,无需用户的干涉。这是一个十分好的特性,并且也是十分契合图形化编程这种以数据活动和中心的编程方法的特色的。
可是,当咱们仍是带着曾经的以指令为中心编程的观念画LabVIEW程序时,就会不知不觉犯下过错。昨日写入和查询Dictionary的代码段如下图所示:
看起来,从左到右履行的话,好像Add是先于TryGetValue的。这实际上是图形的制作方法利诱了咱们。假如简略调整一下各个节点的方位,如下图所示:
以数据活动为中心的LabVIEW就不一定会先履行哪一个函数了。假如先履行的是TryGetValue,就会呈现查询失利的状况。
现在应该怎样处理这个问题呢?LabVIEW以数据活动为中心的编程思维,一方面使主动化的并行编程称为或许,另一方面,使“次序履行”成了一种需求显现声明的结构;这与传统的言语是十分不同的,传统言语写代码,一行一行的码,一行一行的被履行,天然便是次序结构。
咱们在东西箱的编程这一栏中找到了用以表明次序结构的东西:
用这个平铺式次序结构将需求先于TryGetValue调用的部分框起来,如下图所示:
这样一来,只要框内一切的动作履行完结之后,数据才会持续往下活动,所以再也没有呈现查询失利的状况了。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/211824.html