使用定时器,开始采集按钮按下后,每隔5分钟启动采集一次,每次采集5秒钟的数据,按下停止采集按钮后停止。

1、采集按钮按下后,设置一个定时器,SetTimer函数

UINT_PTR SetTimer(   UINT_PTR nIDEvent,   UINT nElapse,   void (CALLBACK* lpfnTimer)(HWND,   UINT,   UINT_PTR,   DWORD) );

nIDEvent      指定一个非零计时器标识符;

nElapse      以毫秒为单位指定定时时长;最大为0xFFFFFFFF,差不多是50天

lpfnTimer    指定一个回调函数的地址,为NULL,则WM_TIMER消息被发送到消息队列,否则用回调函数处理。

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

//CDialogEx::OnOK();需要注释掉

2、在Class View类视图中找到要添加定时器的类,点击右键,选择Properties(属性),点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数,nIDEvent为定时器ID。

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

3、5秒钟到了之后,启动采集计时器2并进行采集,计时器2时间到了之后停止采集并销毁计时器2(这里是否可以用暂停计时?)这里设置界面并定义两个变量int5s和int1s。

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

4、按下停止采集之后,销毁两个定时器。

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

5、使用回调函数,第二步的操作重新做;

如果调用CWnd::SetTimer函数时最后一个参数不为NULL,则需要定义回调函数。回调函数的形式如下:

void CALLBACK EXPORT TimerProc(   

HWND hWnd, // handle of CWnd that called SetTimer   

UINT nMsg, // WM_TIMER   

UINT nIDEvent // timer identification   

DWORD dwTime // system time   

);  

参数hWnd为调用SetTimer成员函数的CWnd对象的句柄,即拥有此定时器的窗口的句柄;参数nMsg为WM_TIMER,而且总是为WM_TIMER;参数nIDEvent为定时器ID;参数dwTime为系统启动以来的毫秒数,即GetTickCount函数的返回值。

回调函数的函数名TimerProc,取代1中setTimer中的NULL。

我们将上面第2部以后所有的函数都删除,重新开始。在void CMFCApplication5Dlg::OnBnClickedOk()函数上面写入回调函数

【MFC笔记】定时器Timer的操作&定时采集固定时间长度的数据

这里的SetTimer需要加入句柄,int5s和int1s需要定义两个全局变量

在取消采集按钮消息下销毁定时器。

2019-3-14

相关文章:

  • 2021-04-14
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-12-26
相关资源
相似解决方案