- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 LabVIEW与多线程 lab view 课件
3.4LabVIEW线程通信与同步 事件发生的测试程序框图 * 3.4LabVIEW线程通信与同步 事件发生用户子VI的程序框图 * 3.4LabVIEW线程通信与同步 通知 通知(Notification)技术通常用于两个相互独立的框图程序之间或同一台计算机中两个不同VI之间的同步通信; 通知器(Notifier)是基于通知技术的通信工具,可以看做数据之间的邮箱,一部分框图程序向邮箱中发送数据,另一部分框图程序从这个邮箱中收取数据; 对于通知器,在没有通知消息发生时,程序框图处于等待状态,避免了无休止地循环检测,从而减少了计算机时间的浪费; 通知技术不能用于网络或VI Servers之间的通信。 * 3.4LabVIEW线程通信与同步 通知流程 从调用“获取通知器引用”(Obtain Notifier)函数来开始创建通知参数值,使用该函数时必须输入元素的数据类型; 通过“发送通知”(Send Notifier)发送信息; 接收方通过“等待通知”(Wait on Notifier)得到发送的信息。 * 3.4LabVIEW线程通信与同步 通知器示例 Notification测试程序前面板 * 3.4LabVIEW线程通信与同步 通知测试程序框图 * 3.4LabVIEW线程通信与同步 通知用户子VI的程序框图 * 3.4LabVIEW线程通信与同步 通知的优缺点 通知和事件发生有些类似,不需要使用轮询技术,减少了系统开销; 通知相比事件发生机制有一定的优势:事件发生不能传递数据,只能触发事件,而通知不仅可以传递数据,还可以通过“取消通知”函数删除信息; 通知也有一些不足:没有数据队列,有时会丢失一些事件,因为新的事件会覆盖旧的没有响应的事件。 * 3.4LabVIEW线程通信与同步 队列 队列(Queue)结构是一种先进先出(FIFO)的结构; 用队列技术,可以将一个有序的消息(或数据)从一个程序中传递到另一个与之相独立的并行运行的程序中; 队列技术把数据发送到一个队列缓存中,如果没有程序将这些数据读出,这些数据将一直保存在队列缓存中,直到有一个程序将其读出并删除; 如果有两个应用程序都在等待同一个队列中的同一条数据,只有那个动作快的程序会收到数据,动作慢的则不会收到预期的数据,因为这条数据已经被动作快的程序读出并删除了。 * 3.4LabVIEW线程通信与同步 队列的应用示例 Queue测试程序前面板 * 3.4LabVIEW线程通信与同步 队列测试程序框图 * 3.4LabVIEW线程通信与同步 队列用户子VI的程序框图 * 3.4LabVIEW线程通信与同步 信号量 信号量(Semaphore)技术可以用于限制同时访问一个被保护的共享资源的任务数目; 通过一个公用的信号量,可以在某一时刻仅允许一个任务执行一个受保护的临界区代码; 信号量和其他同步机制是不同的,其他机制主要是唤醒一个等待任务,信号量则是告诉任务需要等待其他任务允许其执行时才执行,所以能够有效地保护公有资源。 * 3.4LabVIEW线程通信与同步 信号量的应用示例 信号量测试程序前面板 * 3.4LabVIEW线程通信与同步 信号量测试程序框图 * 3.4LabVIEW线程通信与同步 信号量用户子VI的程序框图 * 3.4LabVIEW线程通信与同步 集合点 集合点(Rendezvous)技术可以使若干并行的任务同步执行; 只有所有的任务到达后,才开始同步执行,就好比一个会议,只有等到参会人员到齐后才开始。 * 3.4LabVIEW线程通信与同步 集合点的应用示例 集合点测试程序前面板 * * 3.4LabVIEW线程通信与同步 集合点测试程序框图 3.4LabVIEW线程通信与同步 集合点用户子VI的程序框图 * 3.5提示与建议 多线程应用程序有很多优势,如提高执行效率、获取更多有效CPU使用时间等,在LabVIEW中,写多线程程序及配置线程的优先级是相当容易的。 在有些情况下,使用多线程反而会降低执行效率,在以下情况中应该避免使用多线程: 应用程序的运行步骤有先后顺序; 应用程序有过多的线程切换; 高优先级的线程导致其他线程饥饿; 在系统中只有有限的资源可以利用; 过多使用没有安全保护线程的CIN和DLL; 大部分任务都访问用户界面线程; 死锁线程需要共享数据。 * 3.6习题 简述局部变量、全局变量、事件发生、通知、队列、信号量及集合点之间的异同点。 在一个VI中有两个While循环,如何实现只用一个Stop控件控制Whil
文档评论(0)