LabWindows CVI 6.0 编程指南
LabWindowsCVI6.0编程指南日录第1章绪论简介程序开发概述在中使用语言的程序结构的新特性装第2章 Labwindows/CVⅥI的开发环境载入、运行和编辑源程序的主要窗口源代码编辑工具操作用户界面的控件生成交互式代码访问用户界面库函数面板执行和调试程序单步执行断点显示和编辑数据第3章 Labwindows/CV应用程序设计38图形用户界面用户界面编辑器源代码连接代码生成器建立用户界面文件仗用函数面板和函数库源代码分析生成随机数组构建⊥程运行完整的工程添加分析功能修改用户界面编写回调函数运行程序用户事件处理用户事件回调函数第4章基本函数库用户界面库(面板()操作用户界面管理(菜单结构(控件曲线图带状图()操作弹出面板函数格式化输入输出斥(文件输入输出(字符串处理(数据格式化(实用函数库(定时等待(日期时间(文件应用(路径应用(端口(函数库接口介绍函数库概述编程举例第5章高级函数库116高级分析库概述应用实例斥网络化仪器协议与库服务器程序设计客户程序设计介绍发送数据程序设计接收数据程序设计工具厍(L具斥简介密码设计工具条设计分页界面设计系统托盘设计第6章数据库应用程序开发— SQL Toolkit183概述功能概述的安装入门数据库基木概念结构化查询语言控件数据库基本操作数据库操作基木步骤使用的函数库数据斥高级操作设置连接属性设置语句属性操作复合语句第7章高级程序设计230和的基础知识创建和调试使用概述编程实例多线程概述两种多线程机制多线稈间的数据保护防止死锁监视和控制次线程线程的优先级线程局部变量其它一些要注意的问题第8章 ActiveX技术261技术简介使用控件设计带有控件的应用程序需要注意的问题创建服务器应用程序、对象和接口创建服务器工具生成的代码库—服务器函数联编并发布服务器注册线程模式调试服务器些建议、提示和技巧第9章虚拟仪器软件设计301虚拟仪器概述规范规范概述虚拟仪器软件结构仪器驱动程序开发仪器驱动程序模型函数的应用函数面板的设计动态链接库的牛成仪器软面板的设计仪器软血板软面板的设计叫执行文件的生成帮助文件的制作安装盘的制作规范的安装要求制作安装盘驱动程序仪器可互换性驱动程序的结构驱动程序的其他功能驱动程序开发向导驱动程序与驱动程序附录A函数Fmt、Scan的标识符和修饰符附录BS叫L命令348虚拟仪器软件开发环境—一编程指南第1章绪论是公司美国国家仪器公司,简称公司推出的交互式语言开发平台。将功能强大、使用灵活的语言平台与用于数据采集分析和显示的测控专业L具有机地结合起来,利用它的集成化开发环境、交互式编程方法、函数面板和卡富的库函数大大增强了语言的功能,为熟悉语言的开发设计人员编写检测系统、自动测试环境、数据采集系统、过程监控系统等应用软件提供了一个理想的软件廾发坯境。考虑到人多数测控软件设计人员已经掌握了语言,因此本书的重点放在如何使用的编程环境和应用开发测控应用程序上。本书使用的版本是1.1 Labwindows/CV简介是为语言程序员提供的软件开发系统,在其交互式开发环境中编写的程序必须符合标准规范。使用可以完成如下工作:交互式的程厅开发;只有功能强大的函数库,用来创建数据米集和仪器控制的应用程序充分利用宄备的软件工具进行数据采集、分析和显示利用向导开发仪器驱动程序和创建服务器为其它程序开发目标模块、动态连接库)、语言库。在开发环境中可以利用其提供的库函数来实现程序设计、编辑、编译、链接和标准语言程序调试。在该丌发环垙中可以用丰富的函数库来编写程序,此外每个函数都有一个叫做函数面板()的交互式操作界面,在函数面板中可以执行该函数并可以生成调用该函数的代码,也可通过右击面板或控件获得有关函数、参数、函数类和函数库的帮助。在的交互式环境中编写程序必须符合标准语言的规范。另外,在开发应用程序时可以使用编译好的语言目标模块,动态链接库静态库和仪器驱动程序(如何在中载入目标模块和动态链接斥将在第章介绍)。的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的廾发。其中比较重要的函数库如图所示仪器库是的特殊资源。它包括和仪器的驱动程序,如示波器、多用表和函数发生器,每个驱动程序都提供可编辑的源代码。使用开发工只提供的库函数可以创建自己的仪器驱动程序,可以创建单个仪器、多个仪器或实际上并不存在的虚拟仪器的驱动程序,在创建仪器驱动程序过程中可以虚拟仪器软件开发环境—一编程指南仪器库厍数据采集库数据采集厍格式化和厍数据分析分析库高级分析库函数库数据表示用户界面库动态数据交换厍网络和进程通讯传输控制协议库库标准凶数库的函数厍使用的其它库函数(本书在第章将介绍仪器驱动程序的开发)。使用的用户界面编辑器可以创建并编辑图形用户界面,而使用的用户界面库函数可以在程序中创建并控制。此外,为面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面1.2 Labwindows/GVI程序开发概述在下开发应用程序和使用其它语言和开发环境一样,要保持良好的编程习惯。例如,在编写代码之前要改计程序的功能结构,冋时在代码中要有良好的文档和注释,这些可以帮助你更好的进行管理程序的开发。1.2.1在 Labwindows/cV中使用C语言使用的是语言,并且为仪器方面的应用程序开发增加了许多语言所不具备的功能。在使用之前,需要有语言的基础,在中可以使用它提供的标准厍函数。1.2.2 Labwindows/GVI的程序结构大多数工程测控软件都包含如下内容虚拟仪器软件开发环境—一编程指南用户界面程序控制:数据采集数据分析它们之间的相互关系如图所示。图是应用程序的组成示意图。其中,用户界面、数据呆集和数据分析部分将必要的信息输入给程序控制部分进行处理,每个部分还可再分成若干个子部件用户界面数据采集数据分析面板格式化菜单数字信号处理对话框统计朴学图表数据采集曲线拟合硬拷贝输出仪器驱动程序数组操作程序控制控制逻辑数据存储图应用程序各部分的相互关系用户界面用用户界面编辑器能轻松地建立复杂的交互式面板。设计的过程中,开发人员常常要确定程序如何获取并显示薮据,对菜单、面板、控件和对话框如何操作等问题,因此用户界面自然成为程序设计的起点二、代码生成器生成程序框架在用户界面绽辑器中完成设计后,能够使用代码生成器自动生成基于组件的程序框架。代码生成器自动写出所有控件的回调函数的框架,创建主程序,从而在程序启动时加载并显示窗体。代码编辑器自动生成程序的通用代码,从而节省了人量的程序开发时间。、程序控制程序控制部分同薮据采集、数据分析和用户界面协调运作。它包括管理程序流程的控虚拟仪器软件开发环境—一编程指南制逻辑和用户定义的支持函数。大多数控制程序的代码是手写完成的,学习软件光盘中所提供的例稈,能够很好理解如何编写测控稈序的代码。注意例程中回调函数的使用,它可以大大简化应用流程的控制四、数据采集通常的测控程序必须对从仪器或数据采集()设备的数据采集进行控制,程序的其它部分是对这些数据进行分析和显示各种库提供用来创建数据采集部分的函数,用这些库函数控制和设备以及的数据采集设备。此外,仪器斥包括多种常用的和仪器的驱动程序。五、数据分析获取数据后经常需要进行分析。例如,可能要对数据进行格式化、归一化、信号处理、统计和曲线拟合。格式化和库、分析库高级分析库提供了完成这些操作的函数。1.3 LabWindows/CVI6.0的新特性和以前的版本相比有一些改进,并增添了一些功能:用户可以在用户界面编辑器中创建控件,并在的程序中对它进行控制,本书将在第章“使用控件”中介绍用户可以用中的向导创建或者编辑服务器,本书将在第章“创建服务器”中介绍。用户界面厍中包含了一系列新的搾件。另外,对先前版本原有的搾件和菜单也进行了修改,使其更加接近标准的控件,的控件将在第章的的控件”中介绍支持多字节字符的应用。另外,现在的标准库和仪器驱动程序的上具箱包含了用户可以调用的函数和宏,用户可以用它们实现包含多字节字符的语句。在源程序中书写中文不会像先前的版本那样出现乱码。源代码浏览器列出了程序中的所有的文件、函数、变量、数据类型以及宏。用户可以用这个浏览器了解到程序的一个部分如何与另一个部分相互作用,本书将在第章“源代码编辑工具”中介绍这部分内容。用户可以用图形数组浏览窗∏作为调试上具,以图形方式观察生成的维或二维数组,该部分内容将在第章“显示和编辑数据”中介绍。在中,用户可以将多个工程分组到一个工作台。所有关于工程的外来设置都受工作台的保护。使用工作台,使得在同一源代码设置下的多个开发人员更容易共享工程。用户可以在用户界面编辑器中俣存预宄设置好的用户界面控件,以后可以在用户界面面板中使用,本书将在第章“的控件”中介绍
- 2020-12-07下载
- 积分:1
Java面试笔试题大汇总(最全+详细答案)
搜集的 Java面试笔试题,设置最低积分,备份加供诸位道兄下载,没积分的私我是的内部类,其代码如下所小简单的说,如果整型字面量的值在到之间,那么不会新的对象,而是直接引用常量池中的对象,所以上面的面试题中的结果是而的结果是提醒:越是貌似简单的面试题其中的玄机就越多,需要血试者有相当深厚的功力。和的区别答:运算符有两种用法:按位与;逻辑与ε运算符是短路与运算。逻辑与跟短路与的差别是非常巨人的,虽然二者都要求运算符左右两端的布尔值都是整个表达式的值才是之所以称为短路运算是因为,如果左边的表达式的值是右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用而不是,例如在验证用户登录时判定用户名不是而且不是空字符串,应当写为:二者的顺序不能交换,更不能用运算符,因为第一个条件如果不成立,根本不能进行字符串的比较,否则会产生异常。注意:逻辑或运算符()和短路或运算符()的差別也是如此。补充:如果你熟悉那你可能更能感受到短路运算的强大,想成为的高手就先从玩转短路运算开始吧3114解释内存中的栈堆和静态区的用法。答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过关键字和构造器创建的对象放在堆空间;程序中的字面量()如直接书写的和常量都是放在静杰区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。上面的语句中变量放在栈上,用创建出来的字符串对象放在堆上,而这个字面量放在静态区。补充:较新版本的(从的某个更新开始)中使用了一项叫逃逸分析的技术,可以将一些局部对象放在栈上以提升对象的操作性能等于多少?等于多少?答的返回值是的返回值是。四舍五入的原理是在参数上加然后进行下取整。是否能作用在上,是否能作用在上,是否能作用在上答:在以前,中只能是从开始中引入了枚举类型,也可以是类型,从开始,还可以是字符串(),但是长整型()在目前所有的版本中都是不可以的。、用最有效率的方法计算乘以?答:(左移位相当于乘以的次方,右移位相当于除以的次方)。补充:我们为编写的类重写方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择这个数?前两个问题的答案你可以自己百度一下,选择是因为可以用移位和减法运算来代替乘法,从而得到更好的性能。说到这里你可能凵经想到了:等价于左移位相当于乘以的次方再诚去自身就相当于乘以,现在的都能自动完成这个优化4/114、数组有没有方法?有没有方法?答:数组没有方法,有的属性。有方法中,获得字符串的长度是通过属性得到的,这一点容易和混淆。在中,如何跳出当前的多重嵌套循环?答:在最外层循环前加个标记如,然后用可以跳出多重循环。(中支持带标签的和语句,作用有点类似于和中的语句,但是就像要避免使用一样,应该避免使用带标签的和,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)、构造器()是否可被重写()?答:构造器不能继承,因此不能被重写,但可以被重载。、两个对象值相同但却可有不同的这句话对不对答:不对,如果两个对象和满足,它们的哈希码(相同对于方法和方法是这样规定的:如果两个对象相同(方法返回,那么它们的值一定要相同:如果两个对象的它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就么发在使用容器时,相同的对象可以出现在集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)补充:米于和方法,很多程序都知道,但很多人也就是仅仅知道而己,在的大作《》(很多软件公司,《《编程思想》以及《重构:改善既有代码质量》是程序员必看书籍,如果你还没看过,那就赶紧去亚马逊买一本吧)中是这样介绍方法的:首先方法必须满足自反性(必须返回)、对称性(返回时也必须返回)、传递性(和都返回时,也必须返回)和致性(当和引用的对象信息没有被修改时,多次调用应该得到同样的返回值),而且对于任何非值的引用,必须返回实现高质量的方法的诀窍包括:使用操作符检查参数是否为这个对象的引用;5114使用操作符检查参数是否为正确的类型;对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;编写完方法后,问自己它是否满足对称性、传递性、一致性;重写时总是要重写;不要将方法参数中的对象替换为其他的类型,在重写时不要忘掉注解。、是否可以继承类?答:类是类,不可以被继承。补充:继承本身就是一个错误的行为,对类型最好的重用方式是关联关系)和依赖关系()而不是继承关系()、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?答:是值传递。语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值訫是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。和中可以通过传引用或传输出参数来改变传入的参数的值。在中可以编写如下所示的代码,但是在中却做不到。说明:中没有传引用实在是非常的不方便,这点在中仍然没有得到改进,正是如此在编写的代码中才会出现大量的类(将需要通过方法调用修改的引用置类中,再将对象传入方法),这样的做法只会让代码变得臃肿,尤其是让从和转型为程序员的开发者无法容。和的区别?答:平台提供了两种类型的字符串和,它们可以储存和操作字符串。其中是只读字符串,也就意味着引用的字符串内容是不能被改变的。而类表小的字符串对象可以直接进行修改是中引入的,它和的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被修饰,因此它的效率也比要高。面试题什么情况下用运算符进行字符串连接比调用对象的方法连接字符串性能更好?如果是少量的字符串拼接,可以用,如果是大量的还是用吧是线程安全的是线程不安全的,很6114明显,的系统开销要大,所以如果我们只有个单线程,考虑速度的话更好。那为什么我们很少见到呢?原因很简单,因为我们有时候很难确定我们创建的系统会不会是多线程的,如果考虑到以后扩展的可能性,则更难确定,所以我们更愿意使用因为它是线程安全的,不用担心以后扩展。面试题请说出下面程序的输出。补充:解答上面的面试题需要清楚两点对象的方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与对象的结果是),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用;字符串的操作其本质是创建了对象进行操作,然后将拼接后的对象用方法处理成对象,这一点可以用命令获得文件对应的字节码指令就可以看出来。方法就是把该对象放进常量池。、重载()和重写()的区别。重载的方法能否根据返回类型进行区分?答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在了类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求面试题:华为的面试题中曾经问过这样一个问题为什么不能根据返回类型来区分重载,快说出你的答案吧!返回类型不同不构成重载,重载的机制是参数列表不同,即参数的类型,个数,排列顺序。、描述·下加载文件的原理机制?答中类的装载是由类加载器()和它的子类来实现的,中的类加载器是一个重要的运行时系统组件,它负责在运行时查找和装入类文件中的类。由于的跨平台性,经过编译的源程序并不是·个可执行程序,而是个或多个类文件。当程序需要使用某个类时,会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的文件中的数据读入到内存中,通常是创建一个字节数组读入文件,然后产生与所加载类对应的对象。加载完成后,对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证7114准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后对类进行初始化,包括:如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;如果类中存在初始化语句,就依次执行这些初始化语类的加载是由类加载器完成的,类加载器包括:根加载器()、扩展加载器)、系统加载器()和用户自定义类加载器(的子类)。从)开始,类加载过程采取了父亲委托机制()。更好的保证了平台的安全性,在该机制中自带的是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载不会向程序提供对的引用。下面是关于几个类加载器的说明:般用本地代码实现,负责加载基础核心类库();从系统属性所指定的目录中加载类库,它的父加载器是又叫应用类加载器,其父类是环境变量或者系统属性所指公应它是应用最广泛的关加载器。它从目录中记载类,是用户自定义加载器的默认父加载器。型变量中能不能存贮一个中文汉字,为什么?答:类型可以存储一个中文汉字,因为中使用的编码是不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个类型占个字节(比特),所以放一个中文是没问题的补充:使用意味着字符在内部和外部有不同的表现形式,在内部都是当这个字符被从内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,和,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务;对于程序员来说,要完成这样的编码转换恐怕要依赖于(联合体共用体)共享内存的特征米实现了。、抽象类和接口()有什么异同?答:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承」某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是默认的,而接口中的成员全都是的抽象类中可以定义成员变量,而接∏中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法、静态嵌套类和内部类()的不同?是被声明为静态)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示。扑克类(一副扑克)骆昊黑桃红桃草花方块8114构造器洗牌(随机乱序)发牌发牌的位置下片类(一张扑克)内部类骆昊花色点数9114测试代码:汏牌发第一张牌对于非静态内部类只有通过其外部类对象才能创建对象红心自己创建一张牌洗牌后的第一张打印红心面试题下面的代码哪些地方公产生编译错误?注意中非静态内部类对象的创建要依赖其外部类对象,上面的面试题中和方法都是静态方法,静态方法中没有,也就是说没有所谓的外部类对象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以这样做:、中会存在内存泄漏吗,请简单描述答:理论上因为有垃圾回收机制()不会存在内存泄露问题(这也是被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被回收,因此也会导致内存泄露的发生。例如的10/114
- 2020-06-20下载
- 积分:1