一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LabVIEW多線程編程數(shù)據(jù)傳遞教程

華穗科技 ? 來源:華穗科技 ? 作者:華穗科技 ? 2023-11-24 10:05 ? 次閱讀

很多時候在一個VI的不同線程或者不同VI的不同線程中需要有一些交互——這些線程并不能完全獨立運行,需要一定的數(shù)據(jù)通信才能正確執(zhí)行,這時就需要在編程時使用LabVIEW提供的數(shù)據(jù)通信與同步的一些機制,使需要傳遞的數(shù)據(jù)可以在多個線程之間流通,這樣才能使程序按照正確的預期來執(zhí)行。

本篇文章小編會跟大家講解一些常用的數(shù)據(jù)通信與同步的方法,歡迎大家來一起交流討論!

本文教程

LabVIEW多線程編程數(shù)據(jù)傳遞

首先我們要知道用戶一般是想在兩個并行的循環(huán)中傳遞數(shù)據(jù),而不是串行執(zhí)行的循環(huán),那么什么樣的循環(huán)是串行執(zhí)行的,什么樣的循環(huán)是并行執(zhí)行的呢?

串行執(zhí)行循環(huán):

循環(huán)之間有隧道連線,并且由于這個數(shù)據(jù)線的串聯(lián)導致LabVIEW數(shù)據(jù)流執(zhí)行兩個循環(huán)時串聯(lián)執(zhí)行,只有當前面的循環(huán)執(zhí)行結(jié)束后,后面的循環(huán)才會開始執(zhí)行,這就是串行執(zhí)行的循環(huán)。

wKgZomVgBbWAYVIqAAAjBaYdz1s602.jpg

并行執(zhí)行循環(huán):

循環(huán)之間可以同時獨立運行,循環(huán)之間不存在影響LabVIEW數(shù)據(jù)流并行執(zhí)行兩個循環(huán)的隧道連線。

wKgZomVgBbWAPAOJAAApBmDANhA263.jpg

圖中的兩個循環(huán)采取了可以打破數(shù)據(jù)流的“局部變量”來進行數(shù)據(jù)的通信,這種方式可能會帶來競爭的危險,所以一般不推薦大家作為多線程中傳遞數(shù)據(jù)的首選方法。接下來小編給大家列舉一些多線程之間數(shù)據(jù)通信常用的方法。

一、隊列:

一般來說,當需要在不同線程之間進行通訊或同步的時候首先要考慮的方法絕對是隊列,因為隊列操作簡單高效,隊列傳遞的是地址而不是值,在大量數(shù)據(jù)傳輸時有很高的效率且不會占用過多內(nèi)存開銷。

在掌握了隊列操作的API之后就可以非??焖俚卮罱ㄒ粋€多線程之間的數(shù)據(jù)傳輸架構(gòu),最基礎(chǔ)的多線程軟件設(shè)計模式—生產(chǎn)者消費者模式就是使用隊列搭建的,事實上一些耳熟能詳?shù)能浖軜?gòu)比如QMH架構(gòu)、JKI狀態(tài)機、AF架構(gòu)等,它們在多線程中傳遞數(shù)據(jù)的模塊查找到最底層也都是使用隊列封裝出來的。

下圖是LabVIEW自帶的設(shè)計模板,它就是使用隊列搭建的一個簡單的生產(chǎn)者消費者架構(gòu),使用隊列來在兩個線程之間傳遞數(shù)據(jù)。

wKgZomVgBbWANVkUAACzcRDYRPo406.jpg

二、通道連線:

從LabVIEW 2016開始新增了可以在并行代碼段之間異步傳遞數(shù)據(jù)的“數(shù)據(jù)線”,也稱為“通道連線”。LabVIEW提供了多種通道模板(串流、Tag、消息器等),每種模板表示不同的通信協(xié)議,可以根據(jù)應用程序的通信需求選擇模板。

串流只支持單輸入單輸出,它是緩沖先進先出數(shù)據(jù)的一對一消息傳輸(類似于單條隊列),Tag雖然可以支持多個寫入和讀取,但是多個寫入方之間會產(chǎn)生競爭,讀取方只能讀取到最新寫入的那個數(shù)據(jù),它是單個值數(shù)據(jù)的N對M消息傳輸(類似于一個緩沖區(qū)大小為1的有損耗隊列)。消息器可以支持多個寫入方和讀取方,它是按先進先出順序的緩沖命令類消息的N對M消息傳輸(類似于多條隊列并行)。

如需創(chuàng)建通道線,首先應創(chuàng)建寫入方端點:右鍵單擊接線端或類型,選擇創(chuàng)建?通道寫入方。從寫入方端點的通道接線端繪制通道線并創(chuàng)建讀取方端點:右鍵單擊通道線,選擇創(chuàng)建?通道讀取方

wKgaomVgBbWACJBDAABgUXRo12o804.jpg

通道線在代碼段之間傳輸數(shù)據(jù)的方式與引用句柄或變量相同。但通道線所需的節(jié)點數(shù)少于引用句柄或變量,并且使用可見的連線直觀表示數(shù)據(jù)傳輸。

wKgaomVgBbWAKu5VAAASvICiM0E203.jpg

上圖是一個使用通道連線的范例,可以在兩個并行循環(huán)中傳遞數(shù)值數(shù)據(jù),除了數(shù)值類型以外,通道連線還可以接受LabVIEW中存在的任何數(shù)據(jù)類型,例如字符串、枚舉、路徑、波形、布爾值、簇、數(shù)組、對象等。

wKgaomVgBbWAFsYjAACEXquCVs0358.jpg

注意事項:

1、不要組合使用常規(guī)連線和通道連線連接循環(huán);

wKgaomVgBbWAT1--AABfSt5Epy8041.jpg

2、通道不是數(shù)據(jù),不可以放入數(shù)據(jù)容器中;

wKgZomVgBbWAY-xUAABkonz48lU038.jpg

3、通過在寫入端點上設(shè)置緩沖區(qū)大小來限制緩沖區(qū);

4、使用串流通道時,消費者循環(huán)的速度必須高于生產(chǎn)者循環(huán),如果生產(chǎn)者循環(huán)比消費者循環(huán)運行更快,會占用大量內(nèi)存(未設(shè)置緩沖區(qū)大小時);

三、功能性全局變量:

相信大家對LabVIEW中的局部變量和全局變量都有一定的了解,它們分別可以在單個VI中或者單個應用程序的所有VI中傳遞數(shù)據(jù)。它們使用十分方便,導致很多用戶對它們使用十分頻繁,可是一旦使用不當,就會產(chǎn)生競爭,進而導致數(shù)據(jù)錯誤傳遞,產(chǎn)生未預期的結(jié)果,這種錯誤很難排查。而使用功能性全局變量可以更加安全地在多個線程之間傳遞數(shù)據(jù)。

功能性全局變量其實是一個VI,它既可以實現(xiàn)全局變量的功能又可以避免競爭,所以在某些傳遞數(shù)據(jù)的需求中可以用它來代替全局變量使用。一個功能性全局變量必須具備:1、只循環(huán)一次的循環(huán);2、未初始化的移位寄存器;3、指定動作輸入?yún)?shù)的枚舉;4、設(shè)置為“非重入VI”。

wKgaomVgBbWAKCgKAAAvEsN0-7Y507.jpg

如上圖所示,這是一個很簡單的功能性全局變量,它可以用來在不同調(diào)用方中傳遞一個雙精度浮點數(shù)據(jù)。只循環(huán)一次的循環(huán)可以讓這個功能性全局變量每次被調(diào)用只執(zhí)行一次對應動作,未初始化的移位寄存器可以使全局變量中始終保存上次動作結(jié)束后的值而不被初始化掉;指定動作輸入?yún)?shù)的枚舉可以指定不同調(diào)用方執(zhí)行數(shù)據(jù)的讀取或?qū)懭?。通常功能性全局變量都會設(shè)置為非重入執(zhí)行,這樣可以保證它被調(diào)用時始終按照被調(diào)用的順序來執(zhí)行,從而避免引起競爭。

四、用戶事件:

用戶事件屬于動態(tài)事件的一種,它可以在不同的VI中傳遞一些自定義的數(shù)據(jù),所以我們在多線程編程中可以使用它在不同線程中傳遞數(shù)據(jù)。小編之前寫過一篇給關(guān)于動態(tài)事件的文章,對這種方法感興趣的小伙伴可以參考下面的鏈接學習如何利用用戶事件傳遞數(shù)據(jù):

總結(jié):

除了文章中介紹的這四種數(shù)據(jù)傳遞方法之外,LabVIEW其實還有很多其他多線程之間的同步機制,比如網(wǎng)絡流、通知器、共享變量、信號量等,由于篇幅所限,在這就不過多贅述了,感興趣的小伙伴歡迎留言討論!

以上就是有關(guān)LabVIEW多線程編程第二章節(jié)的所有內(nèi)容啦,系列文章淺談LabVIEW多線程編程的內(nèi)容分享結(jié)束,歡迎大家一起交流探討!

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • LabVIEW
    +關(guān)注

    關(guān)注

    1991

    文章

    3668

    瀏覽量

    331581
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3673

    瀏覽量

    94692
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

    20243

原文標題:知識分享 | 淺談LabVIEW多線程編程(二)

文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LabView多線程語言

    Thread),用于處理界面刷新,用戶的操作等;還有一個執(zhí)行線程,后臺工作。2。LabVIEW 是自動多線程編程語言,只要 VI 的代碼可以并行執(zhí)行,
    發(fā)表于 06-08 10:13

    labview2011自動多線程實例

    提供一個簡單的實例,讓大家體驗到labview多線程編程的優(yōu)點和labview實現(xiàn)自動多線程的強大功能。
    發(fā)表于 10-06 10:06

    labview多線程編程

    子曰:何為labview多線程編程?
    發(fā)表于 03-11 15:46

    C++面向?qū)ο?b class='flag-5'>多線程編程 (pdf電子版)

    C++面向?qū)ο?b class='flag-5'>多線程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    QNX環(huán)境下多線程編程

    介紹了QNX 實時操作系統(tǒng)和多線程編程技術(shù),包括線程間同步的方法、多線程程序的分析步驟、線程基本程序結(jié)構(gòu)以及實用編譯方法。QNX 是由加拿大
    發(fā)表于 08-12 17:37 ?30次下載

    linux多線程編程開發(fā)

    本文中我們針對 Linux 上多線程編程的主要特性總結(jié)出 5 條經(jīng)驗,用以改善 Linux 多線程編程的習慣和避免其中的開發(fā)陷阱。在本文中,我們穿插一些 Windows 的
    發(fā)表于 12-26 14:24 ?55次下載
    linux<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>開發(fā)

    MFC下的多線程編程

    計算機上的上位機制作工具語言之MFC下的多線程編程
    發(fā)表于 09-01 14:55 ?0次下載

    VC-MFC多線程編程詳解

    VC編程中關(guān)于 MFC多線程編程的詳解文檔
    發(fā)表于 09-01 15:01 ?0次下載

    Windows多線程編程

    計算機上的上位機制作工具語言之Windows多線程編程,感興趣的可以看看。
    發(fā)表于 09-01 15:27 ?0次下載

    什么是多線程編程?多線程編程基礎(chǔ)知識

    摘要:多線程編程是現(xiàn)代軟件技術(shù)中很重要的一個環(huán)節(jié)。要弄懂多線程,這就要牽涉到多進程。本文主要以多線程編程以及
    發(fā)表于 12-08 16:30 ?1.3w次閱讀

    Linux下的多線程編程

    ,這個數(shù)據(jù)可能會有較大的區(qū)別。??????? 使用多線程的理由之二是線程間方便的通信機制。對不同進程來說,它們具有獨立的數(shù)據(jù)空間,要進行數(shù)據(jù)
    發(fā)表于 04-02 14:43 ?679次閱讀

    labview AMC多線程

    labview_AMC多線程
    發(fā)表于 08-21 10:31 ?33次下載

    多線程如何保證數(shù)據(jù)的同步

    多線程編程是一種并發(fā)編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執(zhí)行不同的任務,共享同一份數(shù)
    的頭像 發(fā)表于 11-17 14:22 ?1521次閱讀

    mfc多線程編程實例

    (圖形用戶界面)應用程序的開發(fā)。在這篇文章中,我們將重點介紹MFC中的多線程編程。 多線程編程在軟件開發(fā)中非常重要,它可以實現(xiàn)程序的并發(fā)執(zhí)行,提高程序的效率和響應速度。MFC提供了豐富
    的頭像 發(fā)表于 12-01 14:29 ?1757次閱讀

    socket 多線程編程實現(xiàn)方法

    在現(xiàn)代網(wǎng)絡編程中,多線程技術(shù)被廣泛應用于提高服務器的并發(fā)處理能力。Socket編程是網(wǎng)絡通信的基礎(chǔ),而將多線程技術(shù)應用于Socket編程,可
    的頭像 發(fā)表于 11-12 14:16 ?800次閱讀