一道关于Timer计时器的问题!还请各位高手解答
timer2.Elapsed+=newSystem.Timers.ElapsedEventHandler(timer_Elapsed);*****************...
timer2.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
*************************************************************************************************
//Elapsed 事件在 ThreadPool 线程上引发。如果 Elapsed 事件的处理时间比 Interval 长,
//在另一个 ThreadPool 线程中将会再次引发此事件。因此,事件处理程序应当是可重入的。
*************************************************************************************************
我的问题是:分割线中的官方解释是什么意思?真的没有太看懂,能不能举个小例子解释一下呢!
谢谢各位! 展开
*************************************************************************************************
//Elapsed 事件在 ThreadPool 线程上引发。如果 Elapsed 事件的处理时间比 Interval 长,
//在另一个 ThreadPool 线程中将会再次引发此事件。因此,事件处理程序应当是可重入的。
*************************************************************************************************
我的问题是:分割线中的官方解释是什么意思?真的没有太看懂,能不能举个小例子解释一下呢!
谢谢各位! 展开
展开全部
interval是timer循环的时间。
首先你要理解一个概念,就是可重入:简单的说就是不可修改。
分割线中的解释是说,你用timer来循环判断一个事件的时候,
如果这个事件执行所需要的时间比你的timer执行一次的要长,或者说费更多的时间,
你的事件还没有执行玩,你的timer就又到了循环执行那条指令的地方。
这样你的事件要执行的事件就会被再次执行。
如果存在多个timer去执行同一个事件,或者说线程,如果每个timer都对执行的地方做了修改,那么很可能会对要重复执行的那段指令产生错误的影响。所以要被timer执行的指令段是不可修改的。
举例:
int a=1
timer1: timer2:
{a++;} {a=a*a;}
if(a>10) printf(a) ;如果a>10就输出a
2个timer都修改了a的值,如果a等于了11的时候,就在即将输出的一瞬间,timer2把a平方了,
这样本来应该是得到11就成了121.
这个a就不是可重入的,因为它可以被修改。
所以解释就是说,如果你用多个timer对某些数据进行操作的时候,你要操作的变量最好是没有被修改的,就是说只引用不修改。可重入就是可以多次载入内存,没有被修改。
首先你要理解一个概念,就是可重入:简单的说就是不可修改。
分割线中的解释是说,你用timer来循环判断一个事件的时候,
如果这个事件执行所需要的时间比你的timer执行一次的要长,或者说费更多的时间,
你的事件还没有执行玩,你的timer就又到了循环执行那条指令的地方。
这样你的事件要执行的事件就会被再次执行。
如果存在多个timer去执行同一个事件,或者说线程,如果每个timer都对执行的地方做了修改,那么很可能会对要重复执行的那段指令产生错误的影响。所以要被timer执行的指令段是不可修改的。
举例:
int a=1
timer1: timer2:
{a++;} {a=a*a;}
if(a>10) printf(a) ;如果a>10就输出a
2个timer都修改了a的值,如果a等于了11的时候,就在即将输出的一瞬间,timer2把a平方了,
这样本来应该是得到11就成了121.
这个a就不是可重入的,因为它可以被修改。
所以解释就是说,如果你用多个timer对某些数据进行操作的时候,你要操作的变量最好是没有被修改的,就是说只引用不修改。可重入就是可以多次载入内存,没有被修改。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询