如果新的周期到来之前的计时器不能完成所有的工作?(What if a timer can not f

2019-06-24 05:12发布

假设我们有它运行,每10分钟的计时器。 如果它的循环处理时间超过10分钟。 难道一个新的线程开始是什么? 它会中断目前的操作? 如果有什么单一的对象是在计时器内突变?

很抱歉,如果我不提了,任何代码,因为这个问题是清楚的,也是我想知道从多线程编程怪胎的角度来看,完整的答案,而不是试图通过一个示例应用程序来测试它找到一个松散的答案。 其实,我想知道它背后的工作机制的逻辑。

Answer 1:

如果您使用System.Threading.Timer或者System.Timers.Timer ,定时器将再次打勾,开始一个新的线程。 见https://stackoverflow.com/a/10442117/56778一种方式来避免这样的问题。

如果您使用System.Windows.Forms.Timer ,然后直到前一个完成的处理将不会出现新的刻度。



Answer 2:

把你的代码在Monitor.TryEnter()

object timeCheck= new object();

void Timer()
{
    Monitor.TryEnter(timeCheck) 
    {
        //Code that might take too long 
        //...
        Monitor.Exit();
    }
}


Answer 3:

防止重入,您可以使用一个静态布尔告诉阉的媒体链接beeing执行的功能。 用户一个try / catch /终于和设置这个布尔假的最后,以确保布尔不留假的,如果你的代码,或者如果代码失败犯了一个错误。
对于更快的计时器,重入应通过使用信号量(互斥)来防止。



文章来源: What if a timer can not finish all its works before the new cycle time arrives?