第九讲 定时器timer控件及相关函数

上传人:小** 文档编号:91550559 上传时间:2019-06-29 格式:PDF 页数:6 大小:223.42KB
返回 下载 相关 举报
第九讲 定时器timer控件及相关函数_第1页
第1页 / 共6页
第九讲 定时器timer控件及相关函数_第2页
第2页 / 共6页
第九讲 定时器timer控件及相关函数_第3页
第3页 / 共6页
第九讲 定时器timer控件及相关函数_第4页
第4页 / 共6页
第九讲 定时器timer控件及相关函数_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《第九讲 定时器timer控件及相关函数》由会员分享,可在线阅读,更多相关《第九讲 定时器timer控件及相关函数(6页珍藏版)》请在金锄头文库上搜索。

1、第九讲第九讲 定时器定时器 TimerTimer 控件及相关函数控件及相关函数 9.0 引言引言 在上一讲的练习中在画随机图形时,需要连续将 Random 的随机数据画出,如果使用 if 循环画出的数据是有限个,循环计数一到就不能再进行下去,因此使用 InstallMainCallback 安装单一的回调函数处理所有事件。这个回调函数是面板,控件,菜单,都可以调用是通用 消息处理函数,事件函数被调用时产生一个事件,其函数原型为: int InstallMainCallback (MainCallbackPtr eventFunction, void *callbackData, int get

2、IdleEvents); 参数: eventFunction:处理的事件函数的名称。事件函数类型 MainCallbackPtr 事件函数接收面板、菜单栏、菜单项和控件 ID 回调函数的信息。事件函数还接收回调 数据和所述事件的类型,例如左击鼠标,以及任何额外的事件数据,如在一鼠标左键时的鼠 标位置。用户回调必须始终返回 0,除非打算结束事件与它们的响应。结束的情况下,回调 应该返回 1。 Callback_Data: void 型, 指向定义的数据。 回调函数接收的指针。 (Points to data that you define. The callback function recei

3、ves the pointer) int Get_Idle_Events:1=响应空闲事件;0=忽略空闲事件 getIdleEvents 允许执行程序进行时,它通常会被暂停。例如,该程序通常悬浮在 GetUserEvent 或 RunUserInterface 函数当用户按下控件或下拉菜单的鼠标按钮。空闲的事件 不断发生,即使在这种情况下。因为主回调可以接收空闲事件时,程序可以通过响应怠速事 件继续进行处理。调用 SetIdleEventRate 设置空闲事件的发生率。 举例: 在 int CVICALLBACK stripchart (int panel, int control, int

4、event, void *callbackData, int eventData1, int eventData2) switch (event) case EVENT_COMMIT: /为面板、控件和菜单安装主回调函数 InstallMainCallback (EventFunction, 0, 1); /设置主回调函数的响应时间 SetIdleEventRate (100); break; return 0; 在 int CVICALLBACK stripchart 中为绘图控件安装主回调函数 另外,用 SetIdleEventRate (100)函数用于设置主回调接收空闲事件之间的间隔。

5、 这是一种定时响应事件的方式。 9.1 定时器控件定时器控件 使用定时器(Timer)的目的是每隔特定时间间隔触发某一指定事件。由定时器控制这些 事件产生的时间进度。用户只能在用户界面编辑窗口中看到该控件(如图 9.1 所示) ,在程 序运行时该控件不可见。 正因为如此,在程序运行过程中,用户不能用鼠标或是键盘操控 它。 9.1 定时器控件 定时器按照用户设定好的时间间隔,产生 EVENT_TIMER_TICK 事件,随后会执行相 应的回调函数。 定时器有两个重要属性,分别为: ATTR_ENABLED:定时器是否可以响应控件的回调函数。 ATTR_INTERVAL:设置定时器执行回调函数的时

6、间间隔。 上面两个重要的属性可以在双击控件所弹出的控件编辑对话框里设置, 也可以在源文件 中输入源代码设置该属性。 9.2 定时器相定时器相关函数关函数 (1)定时器控件的基本函数定时器控件的基本函数位于:LibraryUserInterface Library Controls/Graphs/Strip ChartsTimers 目录下 。 ResetTimer 函数:重新设置定时器在间隔时间内的开始时间(例如:定时器的 ATTR_INTERVAL 时间间隔属性为 10s,如果在 10s 之内调用该函数,则定时器重新从 0s 开始计时,直到第 10s 才执行相应的回调函数) 。函数原型为:

7、int ResetTimer (int PanelHandle, int ControlID); SuspendTimerCallbacks 函数: 停止所有的定时器回调函数执行, 但并不改变定时器的 间隔时间 ATTR_INTERVAL 属性。函数原型为: int SuspendTimerCallbacks (void); ResumeTimerCallbacks 函数:重新开始执行被 SuspendTimerCallbacks 函数停止的定 时器回调函数。函数原型为: int ResumeTimerCallbacks (void); (2) Timer 控件回调函数 Timer 控件的回调

8、函数为: int CVICALLBACK Timer (int panel, int control, int event, void *callbackData, int eventDatal, int eventData2) event:指 EVENT_TIMER_TICK 事件,默认值为 15。 eventDatal:指向定时器当前时间的指针。 eventData2:记录定时器最后一次接收 EVENT_TIMER_TICK 事件的时间。 (3)与日期时间相关的函数 *DateStr 函数:返回 10 个 ASCII 码字符组成的日期。形式为 MM-DD-YYYY, MM 指月,DD 指日

9、,YYYY 指年份。函数原型为: char *s=DateStr (void); s 为返回值,返回 10 个 ASCII 码字符组成的日期。 *TimeStr 函数:返回一个 8 个字符的时间指针。形式为 HH:MM:SS, HH 指时 , MM 指 分,SS 指秒。函数原型为: char *s=TimeStr (void); s 为返回值,返回 8 个 ASCII 码字符组成的时间。 GetSystemTime 函数:获得系统时间,为数值格式。Windows SDK中 也 包 含 GetSystemTlme 函数,如果在头文件中包含 windows.h 而没有包含 utility.h,将会

10、产生编译错 误。函数原型为: int GetSystemTime (int *Hours, int *Minutes, int *Seconds); 其中, 参数 hours 表示小 时(023); minutes 表示分 (059); seconds 表示 秒(059); 返 回值为 0 时表示成功,为-1 时表示操作系统出错。 GetSystemDate 函数:函数的功能是以数字形式得到系统的日期.该函数原形为 int status = int GetSystemDate (int *Month, int *Day, int *Year); 其中,参数 month 表示月(112); da

11、y 表示日期(131); year 表示年;返回值为 0 时 表示成功,为-1 时表示操作系统出错。 SetSystemTime 函数:设置系统时间。函数原型为: int SetSystemTime (int Hours, int Minutes, int Seconds); 其中, 参数 hours 表示小 时(023); minutes 表示分 (059); seconds 表示 秒(059); 返 回值为 0 时表示成功,为-1 时表示操作系统出错。 SetSystemDate 函数:设置系统日期。函数原型为: int GetSystemDate (int *Month, int *Da

12、y,int *Year); 其中,参数 month 表示月(112); day 表示日期(131); year 表示年:返回值为 0 时 表示成功,为-1 时表示操作系统出错。 练习练习 任务 使用异步定时器编写一个数据采集的多线程程序,和普通定时器比较二者运行时的差 异。 实验步骤 步骤 1:设计程序界面,生成程序框架。 根据实验要求, 我们在面板上放置两个带状图控件, 分别用于显示异步定时器和普 通定时器的采样结果;放置一双态按钮来控制数据采集的开始和关闭。最终界面如图 9-1 所示,其主要控件的基本属性列表见表 9-1。 表 9-1 主要控件基本属性列表 控件类型 Constant Na

13、me 属性设置 面板 Panel PANEL 命令按钮 Command Button QUITBUTTON Callback Function QuitCallback Lable _Quit 双态按钮 Toggle Button TOGGLEBUTTO N Callback Function DAQControlCB Initial State off Lable 数据 定时器控件 Timer TIMER Callback Function DataAquirTimerCB Interval (seconds) 1.0 带状图控件 Strip Chart STRIPCHART Lable 普

14、通定时器 STRIPCHART _2 Lable 异步定时器 string TIME Lable TIME string DATE Lable DATE 图 9-1 最终用户界面 步骤 2:添加异步定时器。把异步定时器的仪器驱动程序添加到当前工程,在工程窗口 选择EditAdd File To ProjectInstrument(*.fp),路径为 CVItoolslibtoolboxasynctmr.fp。 步骤 3:获得异步定时器句柄,在 main 函数添加如下语句: static int AsyncTimerID;/*先声明句柄变量*/ int main (int argc, char

15、*argv) if (InitCVIRTE (0, argv, 0) = 0) return -1; /* out of memory */ if (panelHandle = LoadPanel (0, “lesson9.uir“, PANEL) 0) return -1; DisplayPanel (panelHandle); /*获得异步定时器句柄*/ AsyncTimerID=NewAsyncTimer (1.0, -1, 0, AsyncTimerCB, 0); RunUserInterface (); DiscardPanel (panelHandle); return 0; 步骤

16、 4:声明异步定时器回调函数。在 main 函数之前声明。 /*声明 AsyncTimerCB*/ int CVICALLBACK AsyncTimerCB (int reserved, int timerId, int event, void *callbackData, int eventData1, int eventData2); 步骤 5:编写回调函数。 /*双态按钮回调函数 DAQControlCB*/ int CVICALLBACK DAQControlCB (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) int i; switch (event) case EVENT_COMMIT: GetCtrlVal (panelHandle, PANEL_TOGGLEBUTTON, SetCtrlAttribute (p

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号