新浪博客

CVI技术FAQ

2012-07-05 15:01阅读:
请问CVI中的事件驱动是指什么?
回答=事件驱动是CVI应用程序和用户进行交互的核心原理,具体是指应用程序通过响应用户界面所发生的“事件”来执行代码、调用回调函数。这些事件可以是发生在面板上的对象或者是面板自身。使用LabWindows/CVI进行编程,可以生成事件驱动的代码。通过事件驱动代码,可以将用户界面中的控件连接到代码中的函数。每次对用户界面进行操作都会产生一个事件,LabWindows/CVI就会确定在何控件上发生了什么事件,如果对该控件有一个相应的回调函数,就会激活并运行该回调函数中的代码,进而响应事件。
.CVI的.fp文件的类属性近似C++中的类的概念么?
回答=不是的,CVI中类仅说明文件在仪器驱动程序中的等级,指明其所处的层次,CVI中和C++中的类相近的概念可以理解为各种面板!

请问CVI中回调函数的参数分别有什么意义?
回答=CVI中回调函数的第一个参数是控件所在的面板的句柄。第二个参数为产生事件的控件的标识符。第三个参数是所产生的事件。第四个参数是回调数据,这些回调数据被用来在回调函数之间传递数据。回调数据可以是任何类型的数据。第五和第六个参数随着事件的不同而不同。
LabWindows/CVI控件的四种模式有何区别?
回答= 1.Normal:该模式下用户对控件的操作可产生除Commit事件外的所有事件。 2.Hot:该模式下可产生包括Commit事件在内的所有事件。 3.Validate:在满足相应条件时可产生Commit事件。 4.Indicator:只能做显示用,不能产生任何事件。
请问CVI中条件断点的作用是什么?
回答=CVI中的条件断点不同于普通断点,只有在某些条件被满足后条件断点才会中断程序的运行。这些条件可以是某个变量等于了某一个值,另外,条件断点还
可以设置成当一个条件被满足一定次数以后这个断点才会有效。
请问CVI中的控件有哪几种模式,各有什么意义?
回答=CVI中的控件一共有四种模式,分别是:Normal、Hot、Validate以及Indicator。Normal指这个控件可以由用户直接操作或者是通过编程来进行操作。但是只能够产生数值改变事件而不能产生COMMIT事件。Hot指这个控件可以由用户直接操作或者是通过编程来进行操作。用户的操作可以产生数值改变事件以及COMMIT事件。Validate指与Hot模式相似,但是CVI环境会检查面板上所有数值控件的值是否处于有效范围内,只有所有的值都有效才会产生COMMIT事件。如果有无效值存在就会弹出一个对话框,而不生成COMMIT事件。Indicator指这个控件只能通过编程进行操作。用户对其的操作不会产生任何事件。
CVI中如何调用帮助文件?
回答=在CVI中调用帮助文件有两种方式。ShowHtmlHelp (, HH_DISPLAY_TOPIC, 0);和SystemHelp ('', HELP_CONTENTS, 0, 0);可以根据自己编写的帮助文件来使用不同的函数。
CVI中的事件驱动,在一个回调函数中会响应几个事件?
回答=在CVI中的事件,当控件响应一个鼠标按钮时它会产生几种事件,并在回调函数中执行响应的代码。例如:当用鼠标点击开关时会产生EVENT_COMMIT和EVENT_VAL_CHANGED事件,这样在回调函数中就会出现执行两个不同的代码的情况。
CVI中如何实现及时提示功能?
回答=在CVI中为了实现Windows中当鼠标指针放到某个按钮控件上时自动出现提示,简单说明该按钮的功能。可以使用SetCtrlToolTipAttribute函数来实现该功能。

在CVI中,是否支持一个有冲突变量的函数?
回答=支持,比如说以下包含冲突变量就可以运行:
#include <stdio.h>
#include <stdarg.h>
float average(int num, ...);
main()
{ float x;
x = average(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
printf('The first average is %f.', x);
x = average(5, 121, 206, 76, 31, 5);
printf('The second average is %f.', x);
}
float average(int num, ...)
{
va_list arg_ptr; int count; int total=0;

va_start(arg_ptr, num);
for (count=0; count < num; count++)
total += va_arg(arg_ptr, int);

va_end(arg_ptr);
return((float)total/num);
}
如何减少CVI程序的CPU占用率?
回答=可以在Options-》Enviroment中进行设置,将Sleep Policy设置为Sleep More。或者在程序中进行设置,设置函数为:SetSleepPolicy (VAL_SLEEP_MORE)。
在CVI中如何实现将这次面板参数作为下次的缺省值使用?
回答=一般情况下可以使用文件将各参数保存下来,在下次调用面板时再调用这些参数。也可以使用CVI自带的函数SavePanelState和RecallPanelState。
CVI中如何实现进度条功能?
回答=CVI中可以使用slide控件实现进度条功能。也可以使用Programmer's Toolbox里带的函数来创建进度条。
CVI中使用控件的Tab顺序功能时如何略过某些控件?
回答=将控件改变为Indicator控件,在CVI中Tab顺序是略过显示控件的;2、将控件灰掉,CVI会略过灰掉的控件;3、将下一个控件作为活动控件,从而略过一个控件。
在LabWindows/CVI中如何用多个安全队列(SafeQueue)来实现对多个采集任务的数据保护?
回答=一般来说,在编写一个多线程程序时,我们会在默认的线程池(DefaultThreadPool)中建立一个或多个SafeQueue;然后再建立2个新的线程池(NewThreadPool),分别用于数据的采集和处理;在用于采集的线程池中建立多个线程(Thread),分别对应各个板卡或通道;在用于数据处理的线程池(ThreadPool)中建立一个或多个线程来对进行相应的操作。
LabWindows/CVI中的堆栈大小?
回答=LabWindows/CVI中的堆栈大小直接影响可以分配的数组大小。如果数组的大小超过堆栈大小,则会报告错误。该值可以在Options->Build Options中设置。缺省值为:250000。建议使用动态内存分配。

我的更多文章

下载客户端阅读体验更佳

APP专享