今天写MFC定时器代码时,发现调用了KillTimer()函数后,还是会进入OnTimer函数
实现如下:
通过按钮控制定时器的开关
// 按钮回调函数
void CtimerDlg::OnBnClickedButtonStart()
{
// TODO: 在此添加控件通知处理程序代码
m_bStart = !m_bStart;
if (TRUE == m_bStart){
// 如果点了启动,且定时器没开,则打开定时器
if (0 == m_pReadStatuTimer){
m_pReadStatuTimer = SetTimer(READ_STATUE_TIMER_ID, READ_STATUE_MS, 0);
}
// 把按钮显示成stop
GetDlgItem(IDC_BUTTON_START)->SetWindowTextW(_T("stop"));
// 重新计数
m_nTimerCnt = 0;
}
else{
// 如果再点了一次时,关定时器
if (0 != m_pReadStatuTimer){
KillTimer(m_pReadStatuTimer);
m_pReadStatuTimer = 0;
}
// 把按钮显示成start
GetDlgItem(IDC_BUTTON_START)->SetWindowTextW(_T("start"));
}
}
// 定时器回调函数
void CtimerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nTimerCnt++;
// 更新计数值到EDIT1控件上
CString str;
str.Format(_T("%d"),m_nTimerCnt);
GetDlgItem(IDC_EDIT1)->SetWindowTextW(str);
CDialogEx::OnTimer(nIDEvent);
}
经过查找后,发现KillTimer()的参数写错了,参数应该是定时器ID,写成了定时器句柄了
修改成KillTimer(READ_STATUE_TIMER_ID);就能正常停止定时器了