使用定时器,开始采集按钮按下后,每隔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消息被发送到消息队列,否则用回调函数处理。
//CDialogEx::OnOK();需要注释掉
2、在Class View类视图中找到要添加定时器的类,点击右键,选择Properties(属性),点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数,nIDEvent为定时器ID。
3、5秒钟到了之后,启动采集计时器2并进行采集,计时器2时间到了之后停止采集并销毁计时器2(这里是否可以用暂停计时?)这里设置界面并定义两个变量int5s和int1s。
4、按下停止采集之后,销毁两个定时器。
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()函数上面写入回调函数
这里的SetTimer需要加入句柄,int5s和int1s需要定义两个全局变量
在取消采集按钮消息下销毁定时器。
2019-3-14