LabVIEW可重入VI,VI模板和動態(tài)VI之間的差異
LabVIEW可重入VI,VI模板和動態(tài)VI之間的差異
應(yīng)該在何時使用可重入VI、模板VI和動態(tài)調(diào)用VI?這三種類型之間有什么區(qū)別?
可重入VI
當(dāng)想要同時運行同一VI的多個實例時,將使用可重入VI。當(dāng)VI不可重入時,VI只有一個數(shù)據(jù)空間。因此,一次只能有一個調(diào)用者運行VI,因此調(diào)用者可能必須“等待輪到它”時才能使用VI。這是VI的默認選項,但可以將VI設(shè)置為可重入。其中有兩種類型的重入:共享和預(yù)分配。
共享的可重入VI
如果選擇了共享克隆可重入執(zhí)行選項,則VI會具有一個數(shù)據(jù)空間池(與克隆池相同)。最初在調(diào)用VI開始時只創(chuàng)建兩個克隆。調(diào)用者將使用其中一個數(shù)據(jù)空間,但它并不知道使用的時哪個數(shù)據(jù)空間,并且它可能是后續(xù)調(diào)用中的不同實例。當(dāng)池中沒有足夠的數(shù)據(jù)空間(克?。┯糜谝欢〝?shù)量調(diào)用者同時調(diào)用時,將創(chuàng)建新的數(shù)據(jù)空間(克?。┎⑵涮砑拥匠刂?。這里“實例之間共享克隆”中的“共享”一詞意味著數(shù)據(jù)空間可以由多個調(diào)用者隨時間使用。如果有20個針對SubVI的調(diào)用,但是這些調(diào)用發(fā)生的時間最多中只有兩個調(diào)用同時進行,則池中只有兩個數(shù)據(jù)空間,它們將在20個調(diào)用中“共享”。由于根據(jù)當(dāng)前需要僅創(chuàng)建必要數(shù)量的克隆,因此優(yōu)化了存儲器使用。為了實現(xiàn)最快的執(zhí)行速率和最佳的內(nèi)存優(yōu)化,建議使用此選項。
預(yù)先分配的可重入VI
如果選擇了預(yù)分配克隆可重入執(zhí)行選項,則每個調(diào)用者都有自己的私有數(shù)據(jù)空間(和克?。?。如果有20次調(diào)用VI,則在調(diào)用VI開始時將創(chuàng)建20個克隆并將其添加到池中。如果調(diào)用模式與上述調(diào)用模式類似,則可能只有兩個同時忙碌。如果要對SubVI的給定實例的每次調(diào)用都使用相同的克?。ɡ?,如果SubVI需要將數(shù)據(jù)從這次調(diào)用保持到下次調(diào)用)的話,則使用這種類型的重入VI。共享克隆在這種情況下不起作用,因為您永遠不會知道SubVI的哪個實例上次使用了您將要使用的克隆,并且存儲的信息將在SubVI之間無法預(yù)測地“串?dāng)_”。?“預(yù)分配”意味著對于每次調(diào)用,都會創(chuàng)建該次調(diào)用的數(shù)據(jù)空間和克隆。預(yù)分配發(fā)生在VI運行之前。如果要打開同一VI的多個前面板,可重入的SubVI選項將不起作用。
如果要多次打開的VI是頂層VI,則可以將磁盤上的頂層VI復(fù)制到具有唯一名稱的臨時目錄并打開新文件實例,沒有必要復(fù)制任何SubVI。只需復(fù)制頂層VI,然后,您可以使用VI?Server打開并運行副本。
模板VI
可以將多實例面板制作成模板VI,然后每次從模板打開文件。?VI模板是具有?.vit?擴展名的VI??梢栽?文件?新建?從模板開始?下從模板創(chuàng)建新VI。這將創(chuàng)建一個具有自己內(nèi)存空間的VI的新實例。它們在創(chuàng)建時具有不同的存儲位置,且僅用作制作另一個VI的起點。然后,您需要配置新創(chuàng)建的VI是否可重入。
動態(tài)VI
可以使用VI?Server打開VI和VI模板。?VI?Server?用于動態(tài)加載和運行VI。使用SubVI時,加載頂層VI時會加載SubVI的代碼和數(shù)據(jù)空間。當(dāng)動態(tài)加載VI時,在VI服務(wù)器調(diào)用SubVI之前,不會加載其代碼,而不是將其用作SubVI并在調(diào)用主程序時加載代碼。這樣可以在啟動時節(jié)省內(nèi)存。
相關(guān)信息
完成以下步驟將VI更改為可重入:
導(dǎo)航到文件?VI屬性?。

導(dǎo)航到類別?執(zhí)行?。

確保Reentrancy選項設(shè)置為Shared或Preallocated?。
