加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Labwindows中异步定时器概述

(2012-10-13 12:16:29)
标签:

异步定时器

定时器

回调函数

linux系统

labwindows

分类: 编程相关

toolslib\toolbox\asynctmr.fp

(作者博客 http://blog.sina.com.cn/u/2267289007 转载注明)

 该仪器驱动程序提供了在自己的线程中执行定时器回调函数,因为他们在自己的线程中执行,即使当你的程序的主线程没有处理事件,定时器回调函数仍能被呼叫。这些定时器回调函数,必须在确定的时间间隔周期中将任务执行完毕,如数据采集等。

在不同操作系统上的定时器的差异

可以在Windows和实时(RT)操作系统中使用异步定时器。定时器的行为类似,但又不相同。在Windows系统,使用Windows多媒体定时器函数实现异步定时器。在RT系统,异步定时器使用LabVIEW微秒计时引擎。在两个系统上,LabWindows/ CVI为每个定时器滴答产生一个定时器事件,甚至在定时器运行慢时也是可以的。

 注意:在Windows系统,最多可以创建16个异步定时器,RT系统高达128个。 

你使用的最小时间间隔值依赖于运行异步定时器的系统。如果时间间隔比您的系统所支持的定时器的分辨率小,LabWindows / CVI将使用系统所支持的分辨率间隔。在Windows中,最小间隔值通常为10 ms。在RT系统中,最小时间间隔为1微秒。可以调用GetAsyncTimerResolution 确定系统的分辨率。

运行异步定时器的系统类型,也决定了执行定时器回调函数的线程类型。在Windows上,所有的异步回调函数都共享一个由操作系统管理的公共线程。如果你想让你的程序并行执行多线程,NI建议您使用LabWindows / CVI Utility Library中的线程池函数,而不是异步定时器函数。在RT系统中,每一个定时器运行在其自己的专用线程中。

 在所有类型的系统中,异步回调函数引用或改变的任何变量在被其它线程引用或改变时不能被保护,比如主进程中的线程。你可以使用Utility Library库中的多线程工具函数对多个线程访问的变量进行保护。

定时器回调不能相互中断,一个定时器线程必须退出其自己的回调之后,另一个定时器线程才可以调用它自己的回调。

在Windows中,所有悬而未决的异步回调返回之前,create或discard一个异步定时器将无法完成,直到异步回调返回。在RT系统中,create一个异步定时器是可以完成的,不关心回调是否返回。Discard一个异步定时器,在此定时器的回调没有返回前会被阻塞。

 Linux)可以在LINUX应用程序中使用异步定时器

 在Linux上使用POSIX实时定时器函数实现异步定时器。在硬件允许的情况下,Linux系统上的异步定时器支持时间间隔小到1纳秒。Linux上的异步定时器共享一个由POSIX real-time library管理的公共线程。在Linux应用程序中定时器运行慢时,LabWindows / CVI会跳过定时器事件。Linux系统中,在所有悬而未决的异步回调返回之前,create或discard一个异步定时器将无法完成。 

注意:在Linux系统,您最多可以创建256个异步定时器。

----------------------------------完----------------------------------------------

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有