What if a timer can not finish all its works before the new cycle time arrives?

前端 未结 3 814
醉酒成梦
醉酒成梦 2020-12-13 23:36

Suppose we have a timer which runs every 10 minutes. What if the cycle of its processing takes more than 10 minutes. Does a new thread starts for that? Will it interrupt its

相关标签:
3条回答
  • 2020-12-13 23:54

    Put your code in a Monitor.TryEnter()

    object timeCheck= new object();
    
    void Timer()
    {
        Monitor.TryEnter(timeCheck) 
        {
            //Code that might take too long 
            //...
            Monitor.Exit();
        }
    }
    
    0 讨论(0)
  • 2020-12-13 23:56

    to prevent reentrancy, you might use a static boolean that tells wether the function is allready beeing executed. User a try/Catch/finally and set this boolean to false in the finally to ensure that the boolean does not remain false if you made a mistake in code or if the code failed.
    For a faster timer, reentrancy should be prevented by using semaphore (mutex).

    0 讨论(0)
  • 2020-12-14 00:08

    If you're using System.Threading.Timer or System.Timers.Timer, the timer will tick again, starting a new thread. See https://stackoverflow.com/a/10442117/56778 for a way to avoid that problem.

    If you're using System.Windows.Forms.Timer, then a new tick won't occur until the previous one is finished processing.

    0 讨论(0)
提交回复
热议问题