Esempio n. 1
0
        /// <summary>
        /// Blocks execution of current thread until this daemon has completely stopped.
        /// This call must be performed by only 1 thread otherwise exception is thrown
        /// </summary>
        public void WaitForCompleteStop()
        {
            lock (m_StatusLock)
            {
                if (m_Status == DaemonStatus.Inactive)
                {
                    return;
                }

                if (m_Status != DaemonStatus.Stopping)
                {
                    SignalStop();
                }

                if (m_PendingWaitingStop)
                {
                    throw new AzosException(StringConsts.DAEMON_INVALID_STATE + "{0}.{1}".Args(Name, "WaitForCompleteStop() already blocked"));
                }

                m_PendingWaitingStop = true;
                try
                {
                    DoWaitForCompleteStop();
                }
                finally
                {
                    m_PendingWaitingStop = false;
                }

                m_Status = DaemonStatus.Inactive;
            }
        }
Esempio n. 2
0
 /// <summary>
 ///  停止任务管理器
 /// </summary>
 public void Stop()
 {
     Status = DaemonStatus.Stop;
     _timer.Stop();
     //foreach (CronJob job in cron_jobs)
     //    job.abort();
 }
Esempio n. 3
0
 /// <summary>
 /// Non-blocking call that initiates the stopping of the daemon
 /// </summary>
 public void SignalStop()
 {
     lock (m_StatusLock)
         if (m_Status == DaemonStatus.Active)
         {
             m_Status = DaemonStatus.Stopping;
             DoSignalStop();
         }
 }
Esempio n. 4
0
 /// <summary>
 ///  停止任务管理器
 /// </summary>
 public void Stop()
 {
     Status = DaemonStatus.Stop;
     _timer.Stop();
     foreach (CronJob job in _cronJobs)
     {
         job.abort();
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Allows to abort unsuccessful DoStart() overridden implementation.
        /// This method must be called from within DoStart()
        /// </summary>
        protected void AbortStart()
        {
            var trace = new StackTrace(1, false);

            if (!trace.GetFrames().Any(f => f.GetMethod().Name.Equals("DoStart", StringComparison.Ordinal)))
            {
                Debugging.Fail(
                    text: "Daemon.AbortStart() must be called from within DoStart()",
                    action: DebugAction.ThrowAndLog);
            }

            m_Status = DaemonStatus.AbortingStart;
        }
Esempio n. 6
0
 /// <summary>
 /// Blocking call that starts the daemon instance
 /// </summary>
 public void Start()
 {
     EnsureObjectNotDisposed();
     lock (m_StatusLock)
         if (m_Status == DaemonStatus.Inactive)
         {
             m_Status = DaemonStatus.Starting;
             try
             {
                 Behavior.ApplyBehaviorAttributes(this);
                 DoStart();
                 m_Status = DaemonStatus.Active;
             }
             catch
             {
                 m_Status = DaemonStatus.Inactive;
                 throw;
             }
         }
 }
Esempio n. 7
0
        /// <summary>
        ///  启动任务管理器
        /// </summary>
        public void Start()
        {
            #region 确保执行时间是 每秒的中间时刻执行
            int millisecond = DateTime.Now.Millisecond;
            if (millisecond > 500)
            {
                millisecond = 1500 - millisecond;
            }
            else if (millisecond < 500)
            {
                millisecond = 500 - millisecond;
            }

            if (millisecond != 500)
            {
                Task.Delay(millisecond).Wait();
            }
            #endregion
            _timer.Start();
            Status = DaemonStatus.Started;
        }