zoukankan      html  css  js  c++  java
  • 解决timer重入问题

    System.Timers.Timer 是可以重入的,就是说在一个timer正在执行的时候,如果下次定时器到期了,会有一个新的线程执行timer的动作,也就是发生了重入。

    根据程序的逻辑,这种情况有可能是我们不希望发生的。可以通过加锁的方式解决此问题。见如下代码:

    private readonly object objNotifyTimerLock = new object();
            
    /// <summary>
            
    /// 定时处理邮件发送任务
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void notifyTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                
    if (Monitor.TryEnter(objNotifyTimerLock))
                {
                    
    try
                    {
                        Application[
    "Timer_Notify_LastActiveTime"= DateTime.Now;
                        NotifyerMgr.Instance.Execute();
                    }
                    
    finally
                    {
                        Monitor.Exit(objNotifyTimerLock);
                    }
                }

            }
  • 相关阅读:
    操作系统六文件管理
    Educational Codeforces Round 38 (Rated for Div. 2) ABCD
    51nod 1100 斜率最大
    51nod 最小方差
    51nod 1065 最小正子段和
    P1280 尼克的任务
    牛客小白月赛2
    Codeforces Round #210 (Div. 1) B 二分+dp
    江西财经大学第一届程序设计竞赛
    51nod 1596 搬货物
  • 原文地址:https://www.cnblogs.com/ddeef/p/1739641.html
Copyright © 2011-2022 走看看