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


结论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个
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值