您的位置:首页 > 其它

MFC定时器几种特殊情况的测试

2014-08-13 16:44 148 查看
结论1、循环设置同一”定时器ID“的定时器,相当于只设置一个定时器,定时器被覆盖;想设置多个,则使用不同”定时器ID“的定时器;

void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nIDEvent==1)
{
KillTimer(1);//这里生成第N个txt文件
//调用生成第一个txt函数
int i=0;
for (i=0; i<100000; i++);
if(i==100000) TRACE("文件1:");
}
else if(nIDEvent==2)
{
KillTimer(2);//这里生成第N个txt文件
//调用生成第2个txt函数
int i=0;
for (i=0; i<100000; i++);
if(i==100000) TRACE("文件2:");
}
else if(nIDEvent==3)
{
KillTimer(3);//这里生成第N个txt文件
//调用生成第3个txt函数
int i=0;
for (i=0; i<1000000; i++);
if(i==1000000) TRACE("文件3:");
}
else if(nIDEvent==4)
{
KillTimer(4);//这里生成第N个txt文件
//调用生成第4个txt函数
int i=0;
for (i=0; i<1000000; i++);
if(i==1000000) TRACE("文件4:");
}
else if(nIDEvent==5)
{
KillTimer(5);//这里生成第N个txt文件
//调用生成第5个txt函数
int i=0;
for (i=0; i<10000000; i++);
if(i==10000000) TRACE("文件5:");
}
CDialogEx::OnTimer(nIDEvent);
}

void CTestDlg::OnBnClickedButton1()//点击按钮调5“次”定时器操作
{
// TODO: 在此添加控件通知处理程序代码
for(int i=0;i<5;i++)
{
//SetTimer(i+1,100,NULL);//达到目的:输出一个“文件1:、文件2:、文件3:、文件4:、文件5:”
SetTimer(1,100,NULL);//只输出一次“文件1:”,没有5次,因为前面4次SetTimer操作被最后1次覆盖了,相当于只有最后一个定时器(定时器ID为1)有效
}
}


结论2:程序执行时间过长,超过定时器时间设置的间隔,则程序执行过程中定时器不再触发”操作“,即被忽略,知道程序执行完成,才执行下一个时间间隔的定时器操作。

void CTestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
++m_nCount;//计数
if(nIDEvent==1)
{
timeb time1,time2;
ftime(&time1);
int i=0;
for (i=0; i<100000000; i++);
if(i==100000000) TRACE("文件:%d;",m_nCount);
ftime(&time2);
TRACE("执行时间间隔:%d(ms);",( (time2.time*1000+time2.millitm) - (time1.time*1000+time1.millitm) ));
}
if(m_nCount >= 5)
{
KillTimer(1);
}
CDialogEx::OnTimer(nIDEvent);
}

void CTestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_nCount=0;
//for(int i=0;i<5;i++)
{
//SetTimer(i+1,1,NULL);
SetTimer(1,1,NULL);//时间间隔为1ms,即1ms触发一次,但每执行1次需要200-300ms,故忽略了200-300次的触发;准确输出想要的5次,“文件1:时间间隔277(ms)”等共5个
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: