• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 下雪场景

LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 下雪场景

录入:edatop.com    点击:

(3)程序注释

① NewAsyncTimer 函数

创建一个异步定时器并返回异步定时器ID。创建的异步定时器会自动开辟一个新的线程,其默认优先级为THREAD_PRIORITY_HIGHEST ,如需要修改优先级,可调用NewAsyncTimer WithPriority 函数重新设置优先级,异步定时器支持Windows 、real-time (RT) 、Linux 等系统。函数原型为:

int NewAsyncTimer (double Interval, int Count, int Initial_State, void *Event_Function, void *Callback_Data); 

Interval:指定触发事件时间间隔,以秒计。

Count :指定异步定时器触发的事件数目。如果输入负值,则异步定时器只有调用DiscardAsyncTimer 或SuspendAsyncTimerCallbacks 函数时才会被终止。如果输入0 则返回一个错误。

Initial_State :设置异步定时器为运行或暂停状态。可以通过SetAsyncTimerAttribute 函数重新设置状态。

*Callback_Data :用户定义回调数据。

返回值:返回异步定时器ID。负值表示产生错误。错误说明如表4-6 所示。

表4-6 异步定时器错误说明表

错误码

 说明

–1

系统分配异步定时器资源失败

–2

没有ID 资源分配给异步定时器

–3

内存不足

–4

指定ID 不存在

–5

调用并初始化异步定时器未完成

–6

内部错误

–7

参数传递无效

–8

仅用于实时系统

–9

不能设置此属性

*Event_Function :指定用户自定义异步定时器函数名。此参数为AsyncTimerCallbackPtr 函数指针类型,函数定义与普通定时器类似,即:

int CVICALLBACK FunctionName (int reserved, int timerId, int event, void *callbackData, int eventData1, int eventData2); 

reserved :保留参数。

timerId :异步定时器ID,用于产生回调事件。

event:响应事件,包含EVENT_TIMER_TICK 和EVENT_DISCARD 事件。

*callbackData :用户定义回调数据。

eventData1 :为双精度指针变量,指向异步定时器持续运行时间。

eventData2 :为双精度指针变量,指向异步定时器从上次触发事件到该时间持续时间。

② DiscardAsyncTimer 函数释放异步定时器资源。函数原型为:

int DiscardAsyncTimer (int Timer_ID); 

Timer_ID :异步定时器ID。如果输入值为–1,将释放所有异步定时器资源。注意,创建或释放异步定时器只有当函数执行完毕返回时才能真正完成,否则会有错误产生。

③ SuspendAsyncTimerCallbacks 函数停止所有异步定时器,直到调用ResumeAsyncTimerCallbacks 函数。函数原型为:

int SuspendAsyncTimerCallbacks (void);

④ Delay 函数延时指定时间,以秒计。一般情况下,默认分辨率为1ms 。函数原型为:

void Delay (double Number_of_Seconds); 

Number_of_Seconds :延时时间。

⑤ CanvasDrawPoint 函数在Canvas 控件上绘制点图。绘制时使用ATTR_PEN_COLOR 、ATTR_PEN_MODE 和ATTR_PEN_WIDTH 属性。当ATTR_PEN_WIDTH 属性不为1 时,可能出现非圆形点。函数原型为:

int CanvasDrawPoint (int Panel_Handle, int Control_ID, Point Point); 

⑥ MakeColor 函数利用红、绿、蓝三色合成一个RGB 颜色值。RGB 值是一个4 字节整型数据,用十六进制表示为0x00RRGGBB,RR、GG、BB 分别表示红、绿、蓝三基色。函数原型为:int MakeColor (int Red, int Green, int Blue); 

Red:红色分量值,取值范围为0~255 。

Green:绿色分量值,取值范围为0~255 。Blue:蓝色分量值,取值范围为0~255 。

⑦ DisableBreakOnLibraryErrors 函数

当产生库函数错误时,禁止弹出运行时错误对话框。可以使用SetBreakOnLibraryErrors 函数代替。函数原型为:

void DisableBreakOnLibraryErrors (void); 

通常情况下,可以通过选择菜单Run→Break on→Library Errors 选择打开或关闭运行时错误对话框。如果需要打开运行时错误对话框,也可采用EnableBreakOnLibraryErrors 或SetBreakOnLibraryErrors 函数。

⑧ 异步定时器退出问题

如果将面板回调函数PanelCB 中的SuspendAsyncTimerCallbacks 和Delay 函数删除,在关闭面板时,会弹出运行时错误对话框,如图4-8 所示。从提示内容可以看出,此错误为"NON-FATAL RUN-TIME ERROR",即非致命运行时错误,并给出错误线程ID。由于异步定时器与用户界面逻辑分布在不同的线程中,会造成主函数main 中的DiscardPanel 已经执行完毕,panelHandle 句柄已经释放,但异步定时器可能只运行了一半,由于异步定时器的特殊性决定了其必须运行完毕才能暂停或终止,因此,错误提示中会出现句柄无效的情况。简单的做法是在timer 回调函数的首行添加DisableBreakOnLibraryErrors 函数,禁止错误对话框弹出。如果想根除错误,需要在面板回调函数PanelCB 首先停止异步定时器并等待其执行完毕,即延时一定时间,如一个Interval 来使另一个线程中的timer 函数执行完毕并成功返回。

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 打蜜蜂
下一篇:LabWindows/CVI虚拟仪器设计技术场景与游戏设计之:时钟制作

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图