多线程实时数据采集MFC VISUAL C++ /C++
美国国家仪器公司为用户提供了许多高性能、高速度、高分辨率的数据采集卡,而与之接口的软件大多采用
Labview,Labview是一种图形化编程软件,你只需拖动控件到容器,使用起来确实比较方便。但用户无法知
道底层的东西,这样针对具体的应用,还要自己去理解封装得很深的函数或程序,费时、费力。因此,
c++/MFC还是一种
比较好的选择。如何在MFC中实现实时数据采集呢? 首先,得有定时器,定时器在指定的时间内向窗口发送
WM_TIMER消息,用户在消息处理函数里面完成数据采集和直观的图形或数值实现。设置定时器很简单,只需
简单的调用Settimer(1,100,NULL),消息映射为OnTimer()函数。但实际上,大型的程序设计一般不会采用
这样的方法,而是把数据采集和图形显示放到一个DLL里面,
,但如何在采集完数据后,发消息给视图类,以便视图类把数据以需要的格式显示出来,
曾经尝试发送用户自定义消息,但发现在视图类接收不到该用户自定义消息。因此,眼前要解决的问题关键
在于文档对象需要定时连续地采集数据,然后通知多个视图类以不的格式处理和显示这些数据。在文档要实
现有规律连续数据采集,需要有个定时器事件。
定时器事件通常通过调用UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);函数来实现,
其中, hWnd是与定时器相关联的窗口句柄,此窗口为调用线程所拥有。nIDEvent是定时器标志符,也就是
标识定时器的唯一性,如果要定义多个定时器,就需要用这个参数来区别该定时器。 uElapse是指隔多长时
间来执行后面的第四个参数所指向的函数,lpTimerFunc 是uElapse流逝后系统再次调用的函数的指针。现
在我们对这个API函数有些认识,如要设计一个时间间隔为100毫秒的定时器事件,如SetTimer
(NULL,1,100,lpTimerFunc); 第一个参数为NULL是指没有与定时器相关联的窗口,因而第二个参数也被忽略
了,也意味着在没有窗口的文档类中,不可以实现多个定时器.
回调函数说明如下,VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
);
该Windows 定时器是IBM PC硬件和ROM BIOS构造的定时器的简单扩充。计算机的ROM初始化8523定时器使
其产生硬件中断08H,而该中断的频率为18.2Hz,即每隔54.9ms产生一次中断。也就是说该Windows定时器的
时间精度是54.9ms,基本上能满足数据采集的要求,因为计算机显示屏的刷新频率最快为50Hz-60Hz。
该定时器的优点是初始化简单,容易实现,然而缺点也显而易见,因为WM_TIMER消息的优先级比较低,只有
应用程序队列中的所有其他消息被处理完后,才能处理该WM_TIMER消息,不能保证数据采集的一致性。而且
定时器的分辨率不高,不能满足工业上日益增长德高精度的实时采集的需要。因此,这里提出了一种新的
多媒体定时器,该定时器的相关说明如下:
MMRESULT timeSetEvent( UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
WORD dwUser,
UINT fuEvent )
该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数, 成功后返回事件的标识符代码,否则返回NULL。函数的参数说明如下:
uDelay:以毫秒指定事件的周期。 Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。 LpTimeProc:指向一个回调函数。 DwUser:存放用户提供的回调数据。 FuEvent:指定定时器事件类型: TIME_ONESHOT:uDelay毫秒后只产生一次事件 TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件
具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在LpTimeProc回调函数 中(如:定时采样、控制等),
从而完成所需处理的事件。需要注意的是,任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后, 应及时调用
timeKillEvent()将之释放。
多线程实时数据采集MFC VISUAL C++ /C++相关推荐
- PLC实时数据采集如何实现?
数据采集传输对于后续企业进行分析和决策是十分重要的,而实时数据采集更能提升整体生产的认识度,从而采取到更加及时高效的措施.因此PLC实时数据采集成为企业的基础应用,那么如何实现PLC的实时数据采集呢? ...
- BUAA OO Unit2 多线程实时电梯系统
基于Pipeline模式的架构设计 Pipeline 模式也称为流水线模式.将一个任务处理分解为若干个处理阶段,其中每个处理阶段的输出作为下一个处理阶段的输入,并且各个处理阶段都有相应的工作者线程去执 ...
- 实时数据采集与处理:如何从各种数据源中快速获取数据?
作者:禅与计算机程序设计艺术 随着互联网.大数据.物联网等新兴技术的发展,越来越多的人们开始关注和使用基于这些技术的应用服务.其中,实时数据采集与处理(Real-Time Data Collectio ...
- rsync+sersync多线程实时同步
一.sersync优点 1)使用c++编写,对linux系统文件产生的临时文件和重复文件操作会进行过滤,在结合rsync同步的时候,会减少运行时消耗的本地及网络资源,因此速度更快. 2)相比较inot ...
- 基于W5300和FPGA的实时数据采集系统设计
(以下文章来自:http://xilinx.eetrend.com/article/4032) 数据采集是信号处理的前提,大量采样数据的实时传输十分重要.以太网由于传输速度快.传输距离远,可以方便地实 ...
- matlab研究,基于MATLAB的实时数据采集与分析研究
1.引言本文引用地址:http://www.eepw.com.cn/article/163805.htm 数据采集系统涉及多学科,所研究的对象是物理或生物等各种非电或电信号.根据各种非电或电信号的特征 ...
- Mitsubishi (三菱) Fanuc(发那科),CNC,多线程网口数据采集
1.话不多说,先看效果 三菱CNC Fanuc CNC 2.能采集的数据有如下: 产量,状态,轴负载,坐标,主轴转速,三个倍率(主轴倍率 进给倍率 快速倍率),进给速度,当前加工程序名/程序号,当前程 ...
- UVC 摄像头驱动(三)配置摄像头,实时数据采集
前面分析了 UVC 摄像头的硬件模型和描述符,对于一个 usb 摄像头来说,内部大概分为一个 VC 接口和一个 VS 接口,VC 接口内部有许多 unit 和 terminal 用来"控制& ...
- pyqt5 多线程实时拉流并播放,画面流畅无卡顿
目录 1. 背景 2. 实现 1. 背景 需要用pyqt5做一个简单播放器,能够连接单位摄像头,用rtsp拉流并实时展示.很多博客方法都试过,或者卡顿,或者时延较大,无法满足需求. 2. 实现 主要参 ...
- 极光实时监听怎么调用_源码分析 Sentinel 实时数据采集实现原理(图文并茂)
本篇将重点关注 Sentienl 实时数据收集,即 Sentienl 具体是如何收集调用信息,以此来判断是否需要触发限流或熔断. Sentienl 实时数据收集的入口类为 StatisticSlot. ...
最新文章
- 如何将知识图谱特征学习应用到推荐系统?
- [译]ASP.NET Core 2.0 机密配置项
- centos 开发环境配置
- 码云怎么创建公开的仓库_使用码云或GitHub搭建简单的个人网站(补充hexo搭建博客)...
- 2021年北京学校高考成绩查询,2021年北京高考成绩查询时间及入口【官方】
- c语言判断输入类型是否为指定类型?
- Go语言详细介绍:logo和版本
- CCCC-GPLT L1-035. 情人节 团体程序设计天梯赛
- 机器学习算法之手撕SVM-线性(理论)
- sql server 2016新特性 查询存储(Query Store)的性能影响
- Codeforces Round #483 (Div. 1) A. Finite or not?
- iphone绕过id_破解苹果安卓手机屏幕锁ID锁 极品神器
- centos ping 路由_centos服务器怎么ping 命令
- netmeeting的使用(详解)
- 图书馆管理系统 3-概要设计
- 你知道哪些中国学生普遍生疏但意境很美的英语词汇?
- 医疗物联网七大应用场景案例解析
- java计算机毕业设计基于Web的上门家教系统的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
- python怎么把照片转成卡通_python用OpenCV转卡通照片报错,好像是pyrdown的使用有问题?...
- OpenJudge_P7833 幂的末尾