当前位置:文档之家› 82350B型高速GPIB接口卡DLL常用函数

82350B型高速GPIB接口卡DLL常用函数

82350B型高速GPIB接口卡DLL常用函数
82350B型高速GPIB接口卡DLL常用函数

数据采集系统

实验指导书

杭州电子科技大学自动化学院

二OO三年六月

实验一:Agilent34970A数据采集仪基本操作实验

一、实验目的

1.了解Agilent34970A数据采集仪的基本结构和功能。

2.了解Agilent34901A测量模块的基本功能和工作原理。

3.学习Agilent34970A数据采集仪使用面板进行数据采集的方法。

二、实验要求

1.根据Agilent34970A数据采集仪用户手册,掌握各开关、按钮的功能与作用。

2.通过Agilent34901A测量模块,分别对J型热电偶、Pt100、502AT热敏电组、直流电压、直流电流进行测量。

三、实验内容与步骤

1.实验准备

1.1 Agilent34970A数据采集仪的基本功能与性能。

Agilent 34970A数据采集仪是一种精度为6位半的带通讯接口和程序控制的多功能数据采集装置,外形结构如图1、图2所示:

图1 Agilent34970A数据采集仪外形

图2 Agilent34970A数据采集仪后背板

其性能指标和功能如下:

1. 仪器支持热电偶、热电阻和热敏电阻的直接测量,具体包括如下类型:

热电偶:B 、E 、J 、K 、N 、R|T 型,并可进行外部或固定参考温度冷端补偿。 热电阻:R 0=49Ω至2.1kΩ,α=0.000385(NID/IEC751)或α=0.000391的所有热电阻。 热敏电阻:2.2 kΩ、5 kΩ、10 kΩ型。

2. 仪器支持直流电压、直流电流、交流电压、交流电流、二线电阻、四线电阻、频率、周

期等11种信号的测量。

3. 可对测量信号进行增益和偏移(Mx+B)的设置。 4. 具有数字量输入/输出、定时和计数功能。

5. 能进行度量单位、量程、分辨率和积分周期的自由设置。 6. 具有报警设置和输出功能。

7. 热电偶测量基本准确度:1.0℃,温度系数:0.03℃。 8. 热电阻测量基本准确度:0.06℃,温度系数:0.003℃。 9. 热敏电阻测量基本准确度:0.08℃,温度系数:0.003℃。 10. 直流电压测量基本准确度:0.002+0.005(读数的℅+量程的℅)。 11. 直流电流测量基本准确度:0.08+0.01(读数的℅+量程的℅)。 12. 电阻测量基本准确度:0.008+0.001(读数的℅+量程的℅)。 13. 交流电压测量基本准确度:0.05+0.04(读数的℅+量程的℅)(10Hz ~20kHz 时)。 14. 交流电流测量基本准确度:0.1+0.04(读数的℅+量程的℅)(10Hz ~5kHz 时)。 15. 频率、周期测量基本准确度:0.01(读数的℅)(40Hz ~300kHz 时)。 16. 具有系统状态、校准设置和数据存储等功能。

1.2 Agilent34970A 数据采集仪的面板按钮功能与作用。 1.

在所显示的通道上配置测量参数:

● 在显示的通道上选择测量功能(直流电压、电阻等); ● 选择温度测量的传感器类型;

● 选择温度测量的单位(℃、℉、K );

● 选择测量量程或自动量程设置; ● 选择测量量程分辨率;

● 将测量配置复制和粘贴到其它通道。 2.

为所显示的通道配置定标参数:

● 为所显示的通道设置增益(“M”)和偏移(“B”)值; ● 进行零测量并将它作为偏移量存储;

● 为所显示的通道指定自定义标记(RPM 、PSI 等); 3.

在所显示的通道上配置报警:

● 选择四个报警之一来报告所显示的通道上的报警条件;

●为所显示的通道配置上限、下限或两者;

●配置将启动报警的位模式(只适于数字输入)

4.

配置四个报警输出的硬件线路:

● 清除四个报警输出线路的状态;

●为四个报警输出线路选择“Latch(锁存)”或“Track(跟踪);”模式;

●为四个报警输出线路选择斜率(上升沿或下降沿)。

5.

配置控制扫描间隔的事件或动作:

● 选择扫描间隔方式(间隔、手动、外部或报警);

●选择扫描计数。

6.

在所显示的通道上配置高级测量特性:

● 在所显示的通道上配置测量的积分时间;

● 设置扫描时的通道至通道延时;

● 允许/禁止热电偶检查功能(只适于T/C测量);

● 选择参考结来源(只适于T/C测量);

● 允许/禁止偏移补偿(只适于电阻测量);

● 为数字操作选择二进制或十进制方式(只适于数字输入/输出)

● 配制计数器复位模式(只适于计数器);

● 为计数器操作选择所检测的沿(上升或下降)。

7.

配置系统相关的仪器参数:

● 设置实时系统时钟和日历;

● 查询主机和所安装模块的固件版本;

● 选择仪器的开机配置(上一个或出厂复位值);

● 允许/禁止内部数字万用表;

● 加密/解密仪器以便校准。

8.

查看读数、报警和错误:

● 从存储器中查看最后100个扫描读数(最后、最小、最大和平均);

● 查看报警队列中的前20个报警(出现报警的读数和时间);

● 选择仪器的开机配置(上一个或出厂复位值);

● 查看错误队列中的10个错误;

读取所显示继电器的开关次数(继电器维护特性)。

9.

存储和调用仪器状态:

● 在非易失性存储器中存储5种仪器状态; ● 为每个存储位置指定一个名称;

● 调用所存储的状态、关机状态、出厂复位状态或预置状态。 10.

监视所选的通道。 11.

运行扫描并将读数存储在存储器中: 12.

读取数据。 13.

编辑数据数据。 14.

选择通道、参数。 15.

选择槽数、查看多个数据 16.

打开多路转换器上的所定的通道(即断开通道)。 17.

关闭多路转换器上的所定的通道(即闭合通道)。

2.实验内容:

分别将1个J型热电偶、1个P t100(α=0.000385)型热电阻、1个5 kΩ型热敏电阻、1个直流电压(0.2~1.5V)、1个直流电流(10~100mA)接到Agilent34901A测量模块(如图3所示)的01、02、03、05、21通道中,并分别对它们进行通道配置,最后采样扫描、读取数据。

图3 Agilent34901A测量模块

3.实验步骤:

3.1 按实验内容的要求将上述传感器和信号引线接到规定通道的接线端,并拧紧固定。具体方法如图4所示:

a.用一字螺丝刀拧开盖板螺丝。b.将引线接到规定通道的接线端。

c.将引线沿槽绕出到出孔处。d.重新盖好盖板并拧紧螺丝。

图4 模块接线图

3.2 将Agilent34901A测量模块插入Agilent34970A数据采集仪背部的最上面的槽中(即1#槽)。如图5所示:

图4 模块安装图

3.3 打开电源开关按钮,设置各通道配置:(以J 型热电偶配置为例)

1.用

按钮、旋扭选择101通道(在显示屏的CHANNEL

框中显示出该通道为止)

2.按

键,再通过旋转

旋扭,直到显示屏出现TEMPERA TURE (温

度)

。 3.再按

键(表示确定并继续设置),再通过旋转

旋扭,直到显示

屏出现THERMOCOUPLE

(热电偶)。 4.再

按键(表示确定并继续设置),再通过旋转 旋扭,直到显示

屏出现J TYPE T/C (J 型热电偶,并带冷端补偿)。

5.再按

键(表示确定并继续设置),再通过旋转 旋扭,直到显示屏

出现UNITS ℃ (度量单位为摄氏度)。 6.再按

键(表示确定并继续设置),再通过旋转 旋扭,直到显示

屏出现DISPLAY 0.1 ℃ (显示精度0.1 ℃)。 7.再

按键,即可完成设置并退出。

其余各通道配置类似上述操作,具体步骤略。 3.4 配置各通道后,按按钮开始扫描。

3.5 按按钮,再通过旋转 旋扭,直到显示屏出现READINGS (读数)。 3.6 按

按钮(表示确定),即可在显示屏上看到刚才扫描得到的读数,通过旋

转 旋扭,可以看到各通道的数据。此外,还可以通过 按钮查看该各通道的最后值、最小值、最大值、平均值等数据。

3.6 将各温度和直流信号的大小,重新采样并观测数据的变化情况。

四、实验报告

1. 总结Agilent34970A 数据采集仪基本功能,并分析与A/D 采集卡的区别 2. 写出Pt100热电阻和直流电流通道配置的步骤。

实验二:Agilent34970A数据采集仪远程操作实验

一、实验目的

1.了解Agilent34970A数据采集仪的远程接口的功能。

2.了解GPIB总线的结构和工作原理

3.学习Agilent34901A远程程控指令—SCPI语言和程控控制的基本操作方法。

4.学习VB6.0开发软件控制Agilent34970A数据采集仪的编程方法

二、实验要求

1.掌握仪器远程接口的面板设置方法。

2.采用VB6.0开发软件进行编程,实现对Agilent34970A数据采集仪进行远程通道配置、数据采集、显示等功能。

三、实验内容与步骤

1.实验准备

1.1 Agilent34970A数据采集仪的远程接口的基本情况

Agilent 34970A数据采集仪带有RS-232C和GPIB两种通讯接口,在高精度测量的场合,采用GPIB接口进行通讯时,不但数据通讯质量高、性能稳定,而且传送数据的速度高(大约是RS-232C的10倍)。

GPIB是一个数字化的24脚并行总线,它包括8条数据线、5条控制信号线、3条挂钩线、7条地线、1条屏蔽线,使用8位并行、字节串行的双向挂钩和双向异步通讯方式。由于GPIB的数据单位是字节(8位),数据一般以ASCⅡ码字符串方式传送,传送速度一般可达250~500KB/S,最高可达1MB/S。

GPIB的一个重要特点是联接方式为总线式联接,仪器直接并联在总线上,一个接口可连接14个GPIB接口的仪器,它们相互之间可以直接进行通讯。GPIB有一个控者(PC机)来控制总线,在总线上传送仪器命令和数据,控者寻址一个讲者、一个或者多个听者,数据串在总线上从讲者向听者传送。

将GPIB接口和一般接口系统的结构进行对比,一般接口系统是“一点对一点”传送,而GPIB接口则是“一点对N点”传送,由于其传送速率高、系统扩展方便等优点使计算机和仪器之间的关系更为紧密,就象一座桥梁,连接着仪器工业和计算机工业,改变了以往仪器手工操作、单台使用的传统应用方法。

不过标准PC机和工控机中均不带GPIB接口,因此,要通过GPIB接口实现对Agilent 34970A数据采集仪的远程控制,必须在PC机中安装一块GPIB接口卡并用一根GIPB电缆与数据采集仪的GPIB接口进行连接,本实验台中的GPIB接口卡和电缆由Agilent公司提供,如图6、图7所示

图6 82350B型高速GPIB接口卡图7 GPIB连接电缆其远程控制的工作原理是:插有GPIB接口卡的工控机作为系统的控者,通过调用Agilent 公司提供的VISA32.DLL动态链接库,打开Agilent34970A的地址端口,并向Agilent34970A发送SCPI程控标准命令,对Agilent34970A各测量通道有关参数进行设置,然后启动扫描,并接收Agilent34970A发送的数据。

1.2 Agilent34970A数据采集仪所使用的常用SCPI程控标准命令

1.从远程接口建立扫描表:

● MEASure? 开始扫描,并直接将读数发送到仪器的输出缓冲区,但不在存储器存储读数;

同时将重新定义扫描表,自动将扫描间隔设为“立即”(即0秒),将扫描次

数设为1次。

●CONFiguer 重新配置通道参数;

●ROUTe: SCAN (@101,102…… ) ;发送通道扫描命令

● INITiate 开始扫描,并在存储器中存储读数;

● ABORt停止扫描。

●ROUTE:SCAN:SIZE? 返回扫描通道数

2.扫描间隔:

●TRIG:SOURCE TIMER 选择间隔定时器配置;

●TRIG:TIMER 5 将扫描间隔设置为5秒;

●TRIG:COUNT 进行2次扫描采样。

3.读数格式:

●FORNat:READing: ALARm ON 返回的数据中应包括报警信息;

●FORNat:READing: CHANnel ON 返回的数据中应包括通道信息;

●FORNat:READing: TIME ON 返回的数据中应包括采样时间信息;

●FORNat:READing: TEME:TYPE {ABS|REL} 返回的数据中的时间信息选择绝对或

相对时间;

●FORNat:READing: UNIT ON 返回的数据中应包括度量单位信息;

4.通道延迟:

●ROUTe: CHAN:DELAY 2,(@101 ) 在101通道上增加2秒的通道延迟;

●ROUTe: CHAN:DELAY AUTO ON,(@102 ) 在102通道上允许自动通道延迟。

5.从存储器检索所存储的读数:

●CALC: AVER:MIN?(@305)读取存储器中305通道上的最小读数;

●CALC: AVER:MIN:TIME?(@305)读取存储器中305通道上最小读数的时间;

●CALC: AVER:MAN?(@304)读取存储器304通道上的最大读数;

●CALC: AVER:MAN:TIME?(@304)读取存储器中304通道上最大读数的时间;

●CALC: AVER:AVER?(@303)读取存储器中303通道上的所有读数的平均值;

●CALC: AVER:COUNT?(@303)读取存储器中303通道上的所有读数的数目;

●CALC: AVER:PTPEAK?(@302)读取存储器中302通道上最大—最小值;

●DATA;LAST?(@303)读取存储器中303通道上最后读数;

●CALC: AVER:CLEAR(@301)清除存储器中301通道上统计结果数据;

●DATA;POINTS?读取存储器中所有读数总数;

●DATA;REMOVE?12 从存储器中读取并清除最旧的12个读数;

●SENS:DIG:DATA:BYTE? (@302) 读取302端口8位字节(数字量)

●SENS:DIG:DATA:WORD? (@302) 读取301、302两个端口16位字节(数字量)

6.测量配置:

●CONF:TEMP RTD,85,(@111,112)对111、112通道配置为Pt100温度传感器测量

●CONF:CURR:DC AUTO,(@121,122)对121、122通道配置为自动量程的直流电流测量●CONF:VOLT:DC AUTO,(@311,312)对311、312通道配置为自动量程的直流电压测量●CONF:TEMP TC, J, (@201,202) 对201、202通道配置为J型热电偶传感器测量

●CONF:TEMP THER, 5000, (@109) 对109通道配置为5K型热敏电阻传感器测量

●CALC:SCALE:GAIN 1.9845,(@101)设置101通道的放大倍数

●CALC:SCALE:OFFSET -2.4251,(@101) 设置101通道的偏移量

7.远程接口配置:

●SYSTem:INTerface {GPIB|RS232} 接口方式选择

8.其它

*RST" 出厂复位命令

1.3 Agilent 82350B型高速GPIB接口卡DLL常用函数

● ViOpen Lib "VISA32.DLL" Alias "#131" (ByVal sesn As Long, ByVal desc As String, ByVal mode As Long, ByVal TimeOut As Long, Vi As Long) As Long 打开板卡函数

● ViClose Lib "VISA32.DLL" Alias "#132" (ByVal Vi As Long) As Long 关闭板卡函数

● ViRead Lib "VISA32.DLL" Alias "#256" (ByVal Vi As Long, ByVal buffer As String, ByVal count As Long, retCount As Long) As Long 读取数据函数

● ViWrite Lib "VISA32.DLL" Alias "#257" (ByVal Vi As Long, ByVal buffer As String, ByVal

count As Long, retCount As Long) As Long 写数据函数

● ViOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long打开缓冲区函数

2.实验内容:

分别将1个J型热电偶、1个P t100(α=0.000385)型热电阻、1个5 kΩ型热敏电阻、1个直流电压(0.2~1.5V)、1个直流电流(10~100mA)接到Agilent34901A测量模块(如图3所示)的01、02、03、05、21通道中,采用VB6.0编写程序,实现通过计算机的GPIB 接口总线对Agilent 34970A数据采集仪进行通道配置,采样扫描、读取数据。

3.实验步骤:

3.1 将GPIB连接总线分别与计算机的GPIB接口卡和Agilent 34970A数据采集仪的GPIB 口进行连接,并拧紧。

3.2 设置Agilent 34970A数据采集仪的通讯接口方式:

1.打开电源开关按钮,按

按钮,再按按钮,再通过旋转

旋扭,直到显示屏上出现BPIB/488。 2.再

按键(表示确定并继续设置) 旋扭,直到显示屏

出现 ADDRESS 09(设定通讯地址)。 3.再

按键(表示确定,并退出设置)

3.3 采用VB6.0编写程序,编程思路如下,具体内容由学生完成。

3.4 调试程序,并实现数据采集和显示。

四、实验报告

1.用VB6.0编写Agilent 34970A数据采集仪远程通讯、采集、显示程序2.总结实验过程和结果

Linux多线程编程的基本的函数

Posix线程编程指南(一) 线程创建与取消 这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix线程库API。本文是第一篇将向您讲述线程的创建与取消。 线程创建 1.1 线程与进程 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。 1.2 创建线程 POSIX通过pthread_create()函数创建线程,API定义如下: 与fork()调用创建一个进程的方法不同,pthread_create()创建的线程并不具备与主线程(即调用pthread_create()的线程)同样的执行序列,而是使其运行 start_routine(arg)函数。thread返回创建的线程ID,而attr是创建线程时设置的线程属性(见下)。pthread_create()的返回值表示线程创建是否成功。尽管arg是void *类型的变量,但它同样可以作为任意类型的参数传给start_routine()函数;同时,start_routine()可以返回一个void *类型的返回值,而这个返回值也可以是其他类型,并由pthread_join()获取。 1.3 线程创建属性 pthread_create()中的attr参数是一个结构指针,结构中的元素分别对应着新线程的运行属性,主要包括以下几项: __detachstate,表示新线程是否与进程中其他线程脱离同步,如果置位则新线程不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省为 PTHREAD_CREATE_JOINABLE状态。这个属性也可以在线程创建并运行以后用pthread_detach()来设置,而一旦设置为PTHREAD_CREATE_DETACH状态(不论是创建时设置还是运行时设置)则不能再恢复到PTHREAD_CREATE_JOINABLE状态。

ODBC的接口函数

ODBC的接口函数 1.连接到数据源 下面的函数用于连接到数据源: (1)SQLAllocHandle:分配环境、连接、语句或者描述符句柄。(2)SQLConnect:建立与驱动程序或者数据源的连接。访问数据源的连接句柄包含了包括状态、事务申明和错误信息的所有连接信息。(3)SQLDriverConnect:与SQLConnect相似,用来连接到驱动程序或者数据源。但它比SQLConnect支持数据源更多的连接信息,它提供了一个对话框来提示用户设置所有的连接信息以及系统信息表没有定义的数据源。 (4)SQLBrowseConnect:支持一种交互方法来检索或者列出连接数据源所需要的属性和属性值。每次调用函数可以获取一个连接属性字符串,当检索完所有的属性值,就建立起与数据源的连接,并且返回完整的连接字符串,否则提示缺少的连接属性信息,用户根据此信息重新输入连接属性值再次调用此函数进行连接。 2.获取驱动程序和数据源信息 下面的函数用来获取驱动程序和数据源信息: (1)SQLDataSources:能够被调用多次来获取应用程序使用的所有数据源的名字。 (2)SQLDrivers:返回所有安装过的驱动程序清单,包括对它们的描述以及属性关键字。 (3)SQLGetInfo:返回连接的驱动程序和数据源的元信息。

(4)SQLGetFunctions:返回指定的驱动程序是否支持某个特定函数的信息。 (5)SQLGetTypeInfo:返回指定的数据源支持的数据类型的信息。 3.设置或者获取驱动程序属性 下面的函数用来设置或者获取驱动程序属性: (1)SQLSetConnectAttr:设置连接属性值。 (2)SQLGetConnectAttr:返回连接属性值。 (3)SQLSetEnvAttr:设置环境属性值。 (4)SQLGetEnvAttr:返回环境属性值。 (5)SQLSetStmtAttr:设置语句属性值。 (6)SQLGetStmtAttr:返回语句属性值。 4.设置或者获取描述符字段 下面的函数用来设置或者获取描述符字段: (1)SQLGetDescField:返回单个描述符字段的值。 (2)SQLGetDescRec:返回当前描述符记录的多个字段的值。(3)SQLSetDescField:设置单个描述符字段的值。 (4)SQLSetDescRec:设置描述符记录的多个字段。 5.准备SQL语句 下面的函数用来准备SQL语句: (1)SQLPrepare:准备要执行的SQL语句。 (2)SQLBindParameter:在SQL语句中分配参数的缓冲区。 (3)SQLGetCursorName:返回与语句句柄相关的游标名称。

多线程编程实例---pthread_join函数详解1

多线程编程实例---pthread_join函数详解1 单处理器上的linux多线程,是通过分时操作完成的; 此时互斥锁的作用,只有在时间足够的情况下才能体现出来,即有时线程内需要延时; 否则只有第一个线程不断解锁和获锁,别的线程在第一个线程执行完前无法获得互斥锁。三pthread_join pthread_exit 函数pthread_join用来等待一个线程的结束。函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread_return)); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为: extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__)); 唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。 在这一节里,我们编写了一个最简单的线程,并掌握了最常用的三个函数pthread_create,pthread_join和pthread_exit。下面,我们来了解线程的一些常用属性以及如何设置这些属性。 /////////////////////////////////////////////////////////////////////////// 源程序: /*thread_example.c : c multiple thread programming in linux */ #include

输入法接口函数说明

输入法编程(转贴)(快看) IME输入法编程 第一章Windows9x系统下汉字输入法的基本原理 Windows系统下汉字输入法实际上是将输入的标准ascii字符串按照一定的编码规则转换为汉字或汉字串,进入到目的地。由于应用程序各不相同,用户不可能自己去设计转换程序,因此,汉字输入自然而然落到WINDOWS系统管理中。 一、输入法与系统的关系 键盘事件应用程序 || Windows的USER.EXE | 输入法管理器 | 输入法 系统的键盘事件有windows的user.exe软件接收后,user.exe在将键盘事件传导输入法管理器(Input Method Manager,简称IMM)中,管理器再将键盘事件传到输入法中,输入法根据用户编码字典,翻译键盘事件为对应的汉字(或汉字串),然后再反传到user.exe 中,user.exe再将翻译后的键盘事件传给当前正运行的应用程序,从而完成汉字的输入。 二、汉字输入法的组成 微软Windows9x系统中汉字输入法的名称是"Input Method Editor " ,简称IME,输入法的程序名称为:*.ime,数据文件名称为*.MB,即通常说的输入法编码表(字典). 实际上IME文件是一个动态连接库程序(DLL),它与dll文件没有区别,只是名称不同而已。 一般汉字输入法都由三个窗口组成: 状态窗口(Status Windows)-显示当前的输入法状态(中文还是英文等站环信息); 编码输入窗口(Composition Windows)-显示当前击键情况; 汉字选择窗口(Candidates Windows)-列出当前编码的全部汉字(串),供用户选择或查询。 上述三个窗口由基本的用户接口(User Interface )函数管理着。 现在我们用Dumpbin.exe打开微软提供的拼音输入法(WINDOWS\SYSTEM\WINPY.IME)看看它有什么组成(这里一WINDOWS98为例,并假定windows系统安装在c:盘下):

实验二线程的创建

实验二创建线程 一、实验目的 1. 通过创建线程、观察正在运行的线程和终止线程的程序设计和调试操作,进一步熟悉操作系统的线程概念,理解进程与线程之间的关系。 2. 通过阅读和分析实验程序,学习创建线程、观察线程和终止线程的程序设计方法。 二、实验内容 1. 创建线程 创建线程并因而成就一个多线程程序,是以CreateThread()作为一切行动的开始.此函数的原型如下: HANDLE CreateThread{ LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId}; 如果CreateThread()成功,返回一个新创建的线程的handle。 如果CreateThread()失败,返回一个NULL。可以调用GetLastError()获知原因。

2. 终止线程 线程结束代码可以依靠调用GetExitCodeThread()完成。 BOOL GetExitCodeThread{ HANDLE hThread, /*由CreateThread()传回的线程handle*/ LPDWORD lpExitCode /*指向一个DWORD,用于接受结束代码*/ }; 如果成功,GetExitCodeThread()传回TRUE,否则传回FALSE.如果线程已结束,那么线程的结束代码会被放在lpExitCode参数中带回来.如果线程尚未结束,lpExitCode带回来的值是STILL_ACTIVE。 如果需要用更强制性的手法结束一个线程,可以使用ExitThread()。 三、实验步骤 (1)开启五个线程,设计一个基于Win32多线程应用程序。 (2)基于Win32多线程应用程序,启动两个线程,当用户按下任意键时,试图退出。 (3)验证Thread 使用自己的 Stack 存放 function 中的 local variable。四.程序设计 (1)声明线程标准函数形式,创建等待对象的句柄hThrd,创建接收新线程ID的DWORD变量。进行for循环,执行线程内容ThreadFunc并返回每个核心对象hThrd。之后等待线程全部完成,结束程序。 (2)声明线程标准函数形式,创建等待对象的句柄hThrd1、hThrd2,创建获取线程退出代码的exitCode1、exitCode2,创建接收新线程ID的DWORD变量。执行线程内容ThreadFunc并返回每个核心对象hThrd并输出相关提示信息。进行for循环,接收用户按下的任意键信息,调用GetExitCodeThread等待一个线程的结束,使用GetExitCodeThread传回线程函数ThreadFunc的返回值。函数中用一个死循环,保证两个线程能够完整的运行完成,getch()函数接收用户输入,尝试打断线程,但后面代码保护了线程的继续执行,直至两个线程都执行完成,输出各自的返回值并退出。 (3)验证性程序。

DLL函数接口说明

typedef void __stdcall (*fun_AddResult)(char pDataStr[10][255],double pDataDouble[100]); extern "C" void __declspec(dllimport) __stdcall SetBackColor(TColor pBkColor); extern "C" void __declspec(dllimport) __stdcall FanSelect( void *pSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSeriesNameCount,//系列名称个数,-1时表示全部选择 void *pSubSeriesNames,//系列名称YLDStr * (typedef struct{char Data[255];} YLDStr;) const int pSubSeriesNameCount,//子系列名称个数,-1时表示全部选择 const double &pFlow, //风量 const int &pFlowUnitType, //风量单位类型0-m^3/h 1-m^3/s 2-l/s 3-cfm const double &pPres, //风压 const int &pPresUnitType, //风压单位类型0-Pa 1-mmH2O 2-kgf/cm^2 3-inH2O const int &pPresType, //风压类型0-全压1-静压 const int &pOutFanType,//出风方式0-管道出风1-自由出风 const double &pAirDensity,//空气密度 const double &pMotorSafeCoff,//电机容量安全系数(%) const bool &pUserSetMotorSafeCoff,//用户设定了电机容量安全系数 double &rFlow_STDUnit,//标准单位下的风量 fun_AddResult pAddResult//函数指针,用于回传数据 ); extern "C" void __declspec(dllimport) __stdcall Belt_Selection( const char *pSeriesName, const char *pSubTypeName, const char *pModelName, const int &pSped_DataType,//电机转速类型0-标准数据1-用户数据默认为0(界面选择) const int &pHz_DataType,//频率选择0-50HZ 1-60HZ(界面选择) const int &pRotation,//出风旋转角度R0,R90,R180,R270(参考常量定义) const double &pFanSped,//风机转速(第一步计算得到) const double &pMotorPow,//电机功率(第一步计算得到) const double &pFlow_STDUnit,//标准单位下的风量 const double &pTPres,//全压(第一步计算得到) const double &pSPres,//静压(第一步计算得到) const double &pFTEff,//全压内效率(第一步计算得到) const double &pSdbA,//噪声(第一步计算得到) const int &pV olt,//用户选择的电压(参考电压常量声明V380 V400) , bool pPole[4],//用户选择的极数2,4,6,8 bool pBeltType[4],//用户选择的皮带类型SPZ SPA SPB SPC const bool &pBeSetFanSped,//用户设定了风机转速 const double &pFanSpedRt_User,//用户设定的风机转速差 const bool &pBeSetBeltMoveSped,//用户设定最大皮带运动速度 const double &pBeltMoveSped_User,//用户设定的最大皮带运动速度

LWIP接口函数的文档

Lwip 协议栈的设计与实现 (中文版) Swedish Institute of Computer Science February 20, 2001 作者:Adam Dunkels adam@sics.se 翻译:果农(QQ:10205001) 核桃(QQ:329147) 佳旭(QQ:3232253) 整理:佳旭(QQ:3232253) 本文为QQ群ARM TCPIP LCD(群号:10988210)版权所有未经作者许可不得用于商业用途 摘要

LWIP是TCP/IP协议栈的一种实现。LWIP的主要目的是减少存储器利用量和代码尺寸,使LWIP适合应用于小的、资源有限的处理器如嵌入式系统。为了减少处理器和存储器要求,lwIP 可以通过不需任何数据拷贝的API进行裁减。 本文叙述了lwIP的设计与实现。叙述了协议实现及子系统中所使用的算法和数据结构如存储和缓冲管理系统。还包括LWIP API的参考手册和使用LWIP 的一些代码例子。 目录 1 Introduction (1) 2 Protocol layering (1) 3 Overview (2) 4 Process model (2) 5 The operating system emulation layer (3) 6 Buffer and memory management...................................................................... (3) 6.1 Packet buffers -pbufs (3) 6.2 Memory management (5) 7 Network interfaces........................................................................................ .. (5) 8 IP processing (7) 8.1 Receiving packets (7) 8.2 Sending packets (7) 8.3 Forwarding packets (8) 8.4 ICMP processing (8) 9 UDP processing............................................................................................ (8) 10 TCP processing.......................................................................................... (9) 10.1 Overview (9) 10.2 Data structures (10)

多线程编程

Linux操作系统实验报告 填写时间:2012年6月6日课程名称Linux操作系统实验教程 实验名称多线程编程 姓名邱爽学号2009221104210047 专业年级09计一 一、实验目的:(1)掌握Linux操作系统中进程和线程的概念 (2)掌握Linux操作系统中多线程编程的基本原理和方法 (3)学会利用创建多线程并实现简单的功能 二、实验设备: 装有Linux操作系统(Ubuntu或Deepin)的PC机一台 三、实验原理: 1、进程与线程的概念 进程与线程都是现代操作系统中程序运行的基本单位,多用户、多任务操作系统利用进程和线程来实现对应用任务的并发性。通俗地讲,进程是一个具有独立功能的程序关于某个数据集合上的一次并发执行的运行活动,是一种有生命周期的动态实体,是支持程序执行的一种系统机制。在单线成结构进程中,进程作为构成系统的基本实体,及时内部独立的执行单元,又是独立竞争资源的基本单元。在多线程进程中,进程是系统进行资源分配和保护的基本大院,而线程是进程内独立的执行单元,即一条执行路径。线程包含独立的堆栈和处理器及寄存器状态,每个线程共享器所附属进程的所有资源。 线程与进程的关系主要包括以下几个方面: (1)进程是资源分配和管理的基本单位,线程是程序执行的独立单位; (2)进程在执行过程汇总拥有独立的主存空间,而线程不能够独立存在,必须运行在所属进程的地址空间内。 (3)线程属于进程的组成部分,进程课包含多个线程。当进程被撤销是,改进程所产生的线程都会被强制撤销。 2、多线程编程 线程在进程的基础上作进一步抽象,也就是说一个进程分为两个部分:线程集合和资源集合。线程是进程中的动态对象,它是一个独立的控制流,进程中的所有线程将共享进程拥有的资源。 在Linux中,可把线程分为内核线程、内核支持的用户线程和线程库支持的用户线程等3种类型。其中,内核编程负责实现一个指定系统功能;内核支持的用户线程实质上是特殊的进程,能被单独调度和运行;用户进程是通过线程库实现的,内核不参与调度,线程库提供同步和调度方法。 我们做实验所用到的正是多线程编程里的用户线程。每个用户线程都可以有自己的用户栈,即用来保存用户级寄存器上下文以及信号屏蔽等状态信息的主存区。线程库支持的用户线程不是真正的调度实体,内核对他们一无所知,而只是调度用户线程所属的线程,这些进程再通过线程库函数来调度进程内的用户线程。 3、线程控制 (1)线程创建

线程创建与通信实验报告

实验报告 课程名称:现代软件技术实验名称:线程创建与通信实验人: 专业: 实验时间:

目录 一、实验目的 (3) 二、实验内容 (3) 1、基本要求 (3) 2、提高要求 (3) 三、需求分析 (3) 1、功能分析........................................................................................... 错误!未定义书签。 2、其它分析........................................................................................... 错误!未定义书签。 四、总体设计 (3) 1、数据结构设计(或类设计:数据成员设计、成员函数设计) (3) 2、软件总体结构设计 (3) 3、主程序流程设计 (3) 4、界面设计 (4) 五、详细设计 (5) 1、循环链表基本操作:....................................................................... 错误!未定义书签。 六、编码实现 (5) 1、循环链表基本操作........................................................................... 错误!未定义书签。 七、测试及分析 (7) 1、测试用例列表 (7) 2、出现的错误、解决方法与回归测试 (7) 八、实验总结 (8)

一、实验目的 掌握线程创建方法,实现线程间数据通信。 二、实验内容 1、基本要求:创建多个线程,实现线程间数据通信。 2、提高要求: (1)通过信号量机制实现线程的并发执行; (2)通过信号量机制控制屏幕输出; (3)生产者消费者问题; (4)创建多个进程,实现进程间通信。 三、需求分析 完成如下程序框图的程序: 图1 所需完成程序的程序框图 四、总体设计 1、数据结构设计 主线程和子线程之间的数据传递通过简单的int类型变量对同一个文件进行读入写出完成。 2、软件总体结构设计 通过设计两个线程函数:主线程函数main()和EventFunction()构成 3、主程序流程设计 程序流程图见图2。

CAN应用接口函数

CAN应用接口函数库使用手册V1.0

目录 1.接口卡设备类型定义 (3) 2.错误码定义 (4) 3.函数库中的数据结构定义 (5) 3.1.VCI_BOARD_INFO (5) 3.2.VCI_CAN_OBJ (6) 3.3.VCI_CAN_STATUS (7) 3.4.VCI_ERR_INFO (8) 3.5.VCI_INIT_CONFIG (9) 3.6.VCI_RxAcptMask (10) 3.7.VCI_RxAcptFilter (11) 4.接口库函数说明 (12) 4.1.FD_OpenDevice (12) 4.2.FD_CloseDevice (13) 4.3.FD_InitCan (14) 4.4.FD_ReadBoardInfo (15) 4.5.FD_GetReceiveNum (16) 4.6.FD_ClearBuffer (17) 4.7.FD_StartCAN (18) 4.8.FD_ResetCAN (19) 4.9.FD_Transmit (20) 4.10.FD_Receive (21) 4.11.FD_RxAcptMaskInit (22) 4.12.FD_DisableRxAcptFilter (23) 4.13.FD_RxAcptFilterInit (24) 4.13.FD_SetOperationMode (25) 5.接口库函数使用方法 (26) 5.1.VC调用动态库的方法 (26) 5.2.VB调用动态库的方法 (26)

1.接口卡设备类型定义 各个接口卡的类型定义如下: 设备名称设备类型号备注 USBCAN11第一代USBCAN USBCAN22第二代USBCAN CAN2323待开发PCICAN4待开发

C++多线程编程入门及范例详解

多线程编程之一——问题提出 一、问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG 添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: 1.void CSingleThreadDlg::OnSleepSixSecond() 2.{ 3.Sleep(6000);//延时6秒 4.} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。 二、多线程概述 进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。 线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows 系统。主执行线程终止了,进程也就随之终止。 每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。 多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。 Win32SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。Visual C++6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。 三、Win32API对多线程编程的支持 Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。

OCX接口说明V4

1.概述 精伦电子股份有限公司开发的二代身份证读卡系列机具适用于相关行业的联机型应用。产品提供了完善的二次软件开发接口(API)。本手册针对提供的ActiveX控件,对开发接口的文件组成、方法定义格式、调用方法及返回值等进行了详细的说明。 2.接口文件说明 接口文件包括: IdrControl.ocx Dewlt.dll Savephoto.dll Wltrs.dll 适用开发语言: 网络脚本开发 第一次使用时,需要以管理员身份运行SetupOCX.exe对控件进行安装注册。 更新说明: V4.0.1.0增加对编码设备支持,可设置日志文件。 V4.0.0.6增加RepeatRead 方法,可设置后进行连续读身份证。 V4.0.0.0增加对210-P的支持。 V3.4.1.4解决和13002相关在20130726的读卡体管理号问题。 V3.4.1.3解决一个潜在导致内存泄漏的问题。 V3.4.1.2增加GetCardPhotobuf方法,用于获取身份证正反面图片JPG格式Base64编码信息。 V3.4.1.0增加ExportPhoto方法,可在读卡结束后生成指定照片和卡图片文件名。

3.接口方法说明 3.1. 身份证方法 3.1.1.读身份证方法 原型:short ReadCard(long iPort,BSTR PhotoPath) 说明:本方法将打开端口、找卡、读卡等功能进行了集成,可用于打开串口或USB口并读取二代证卡内信息。 参数: 1、iPort:设置串口、USB或iDR210免驱动USB-HID。 普通串口 1 – 16(十进制) 例如: 1:串口1(COM1) 2:串口2(COM2) USB USB-HID (iDR210) 1001 例如: 1001:USB 2、PhotoPath:生成图片文件的绝对路径,包括生成的照片文件photo.bmp,photo.jpg和指定文件名的照片文件,和身份证正反面图片card.jpg。该参数为""时,默认将照片文件保存到Windows系统临时文件目录(GetTempPath())。也可自行设置保存的路径,比如:"d:\\photos\\photo.bmp",注意文件参数必须设置正确,才能正确地将相片文件放在指定位置(相片文件夹若不存在,将会自动生成新文件夹)。 返回值: 值说明 1 正确 -1 端口初始化失败 -2 卡认证失败(请重新将 卡放到读卡器) -3 读取数据失败 -4 生成照片文件失败(请 检查设定路径和磁盘空

API应用程序编程接口详解

API应用程序编程接口 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API除了有应用“应用程序接口”的意思外,还特指API的说明文档,也称为帮助文档。另外,也是美国石油协会、空气污染指数、医药、空中位置指示器的英文简称。 Windows API是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以告 诉Windows发生了什么.

这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法. 这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数。同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个 特定事件(Button_Click). API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll...). 更易理解地说:Windows 这个多作业系统除了协调应用程式的执行、分配内存、管理系统资源…之外,她同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备…等目的,由於这些函数服务的对象是应用程式(Application),所以便称之为Application Programming Interface,简称API 函数。WIN32 API也就是MicrosoftWindows 32位平台的应用程序编程接口。 凡是在Windows 工作环境底下执行的应用程式,都可以 调用Windows API。 API的历史与现状

多线程编程实例

编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。 函数pthread_create用来创建一个线程,它的原型为:extern int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg)); 第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。当创建线程成功时,函数返回0,若不为0则说明创建线程失败。 函数pthread_join用来等待一个线程的结束。函数原型为:extern int pthread_join __P ((pthread_t __th, void **__thread_return)); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。 一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为: extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));

最简单的线程程序: /* example.c*/ #include #include void thread(void) { int i; for(i=0;i<3;i++) printf("This is a pthread.\n"); } int main(void) { pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *) thread,NULL); if(ret!=0){ printf ("Create pthread error!\n"); exit (1); } for(i=0;i<3;i++) printf("This is the main process.\n"); pthread_join(id,NULL); return (0); } 输出是什么样子?

ORACLE数据库API接口函数设计说明

ORACLE数据库API接口函数设计说明 API接口函数使用示例: 参见程序OCIDEMO.DSW //工程中不用在连接ociw32.lib只用xjoci.lib就行了。 假定: 工程文件为newocidemo,所在目录为c:\newocidemo,newocidemo.exe 位于c:\newocidemo\debug下面 使用步骤: 1、将MyConnection.h;oratypes.h;ocidem.h;ocidfn.h;xioci.lib复制到c:\newocidemo下面 2、将xioci.dll复制到c:\newocidemo\debug下面 3、设置project 下的settings 下面的link 中的object/library modules: 为xjoci.lib 4、在file中添加MyConnection.h,从而在class中会出现connection,cursor两个新类 API接口函数类设计: CONNECTION类 class connection { friend class cursor; public: BOOL IsConnected(); connection();

~connection(); BOOL connect(char *username, char *password,char *sername); BOOL disconnect(); void display_error() const; private: Lda_Def lda; ub1 hda[HDA_SIZE]; enum conn_state { not_connected, connected }; conn_state state; }; BOOL connect(char *username, char *password,char *sername); 函数用途:connect函数建立OCI程序与ORACLE数据库的连接参数说明:char *username,--用户名 char *password,--口令 char *sername—主机字符串(数据库别名)。 返回值:连接成功返回TRUE,不成功返回FALSE BOOL disconnect(); 函数用途:disconnect函数断开与数据库的连接 参数说明:

linux下的多线程编程常用函数

Linux下pthread的实现是通过系统调用clone()来实现的。clone()是Linux所特 有的系统调用,他的使用方式类似fork. int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); 返回值:若是成功建立线程返回0,否则返回错误的编号 形式参数: pthread_t *restrict tidp 要创建的线程的线程id指针 const pthread_attr_t *restrict attr 创建线程时的线程属性 void* (start_rtn)(void) 返回值是void类型的指针函数 void *restrict arg start_rtn的行参 进行编译的时候要加上-lpthread 向线程传递参数。 例程2: 功能:向新的线程传递整形值 #include #include #include void *create(void *arg) { int *num; num=(int *)arg; printf("create parameter is %d \n",*num); return (void *)0; } int main(int argc ,char *argv[]) { pthread_t tidp; int error; int test=4; int *attr=&test; error=pthread_create(&tidp,NULL,create,(void *)attr); if(error) { printf("pthread_create is created is not created ... \n"); return -1; } sleep(1); printf("pthread_create is created ...\n");

C++接口使用说明

NetCDF C++接口使用说明 作者:杜鸿飞 完成时间:2004年4月

目录 一、NetCDF文件介绍 (2) 二、NetCDF C++类函数详解 (3) 1. NcFile类公有成员函数 (3) 文件操作 (3) 维数操作 (4) 变量操作 (4) 属性操作 (6) 2. NcDim类公有成员函数 (7) 3. NcVar类公有成员函数 (7) 4. NcAtt类公有成员函数 (9) 三、NetCDF C++使用举例 (10)

//***************** function about dimension ****************************** int num_dims(); 返回文件所含dim数目 int unlimdimid(); 返回unlimited dimension的ID void def_dim(NcDim &dim); 将参数dim定义到文件中 NcDim inq_dim(int dimid); 返回文件中ID号为dimid的dim维数 NcDim inq_dim(const string dimname); 返回文件中名字为dimname的dim维数 void rename_dim(int dimid, string name); 将文件中ID号为dimid的维数重命名为name //***************** function about variable ****************************** int num_vars(); 返回文件所含var数目 void def_var(NcVar &var); 将参数var定义到文件中 NcVar inq_var(int varid); 返回文件中ID号为varid的var变量 NcVar inq_var(const string varname); 返回文件中名字为varname的var变量 void rename_var(int varid, string name); 将文件中ID号为varid的变量重命名为name template void put_var_single(int varid, int index[], Type value); 给文件中ID号为 varid的var变量写入一个值 varid:欲写入值的变量的ID号 index: 欲写入值在变量中位置的索引,用数组存储,如对于一个3维变量,对其任一元素写值,index为一含3个元素的数组(0,0,0)到(2,2,2); value: 将要写入的值,为摸板参数类型,其类型由函数自动解析。 template void put_var_entire(int varid, Type block[]); 给文件中ID号为 varid的var变量整体写入值 varid:欲写入值的变量的ID号 block: 存储将要写入值的数组地址,该数组大小应不小于变量实际元素个数。block为摸板参数类型,其类型由函数自动解析。 template void put_var_array(int varid, int start[], int count[], Type *block); 给文件中ID号为 varid的var变量部分写入值 varid:欲写入值的变量的ID号 start:欲写入值的其始位置索引,格式同put_var_single函数中的index参数

相关主题
文本预览
相关文档 最新文档