public int RegisterHeldOffTask(DoMaintenanceDelegate do_maintenance_delegate, int delay_before_start_milliseconds, int delay_before_repeat_milliseconds = -1, ThreadPriority thread_priority = ThreadPriority.BelowNormal, int hold_off_level = 0, string extra_descr = "") { // Utilities.LockPerfTimer l1_clk = Utilities.LockPerfChecker.Start(); int index; if (delay_before_repeat_milliseconds <= 0) { delay_before_repeat_milliseconds = delay_before_start_milliseconds; } lock (do_maintenance_delegate_wrappers_lock) { // l1_clk.LockPerfTimerStop(); // Set up the wrapper DoMaintenanceDelegateWrapper do_maintenance_delegate_wrapper = new DoMaintenanceDelegateWrapper(); do_maintenance_delegate_wrapper.maintainable_description = String.Format("{0}:{1}{2}", do_maintenance_delegate.Target, do_maintenance_delegate.Method.Name, extra_descr); do_maintenance_delegate_wrapper.target = new WeakReference(do_maintenance_delegate.Target); do_maintenance_delegate_wrapper.method_info = do_maintenance_delegate.Method; do_maintenance_delegate_wrapper.delay_before_start_milliseconds = delay_before_start_milliseconds; do_maintenance_delegate_wrapper.delay_before_repeat_milliseconds = delay_before_repeat_milliseconds; do_maintenance_delegate_wrapper.hold_off_level = hold_off_level; do_maintenance_delegate_wrapper.daemon = new Daemon("Maintainable:" + do_maintenance_delegate.Target.GetType().Name + "." + do_maintenance_delegate.Method.Name + extra_descr); // Add it to our list of trackers index = do_maintenance_delegate_wrappers.Count; do_maintenance_delegate_wrappers.Add(do_maintenance_delegate_wrapper); // Start the thread do_maintenance_delegate_wrapper.daemon.Start(DaemonThreadEntryPoint, do_maintenance_delegate_wrapper); do_maintenance_delegate_wrapper.daemon.Priority = thread_priority; } return(index); }
public Daemon Register(DoMaintenanceDelegate do_maintenance_delegate, int delay_before_start_milliseconds, ThreadPriority thread_priority) { lock (do_maintenance_delegate_wrappers) { // Set up the wrapper DoMaintenanceDelegateWrapper do_maintenance_delegate_wrapper = new DoMaintenanceDelegateWrapper(); do_maintenance_delegate_wrapper.maintainable_description = String.Format("{0}:{1}", do_maintenance_delegate.Target, do_maintenance_delegate.Method.Name); do_maintenance_delegate_wrapper.target = new WeakReference(do_maintenance_delegate.Target); do_maintenance_delegate_wrapper.method_info = do_maintenance_delegate.Method; do_maintenance_delegate_wrapper.delay_before_start_milliseconds = delay_before_start_milliseconds; do_maintenance_delegate_wrapper.daemon = new Daemon("Maintainable:" + do_maintenance_delegate.Target.GetType().Name + "." + do_maintenance_delegate.Method.Name); // Add it to our list of trackers do_maintenance_delegate_wrappers.Add(do_maintenance_delegate_wrapper); // Start the thread do_maintenance_delegate_wrapper.daemon.Start(DaemonThreadEntryPoint, do_maintenance_delegate_wrapper); do_maintenance_delegate_wrapper.daemon.Priority = thread_priority; return(do_maintenance_delegate_wrapper.daemon); } }