/// <summary> /// 不停的执行行为,间隔时间为<paramref name="intervalMilliseconds"/> /// </summary> /// <param name="intervalMilliseconds"></param> /// <param name="action"></param> /// <param name="catchException"></param> public IntervalAction(int intervalMilliseconds, Action <IntervalAction> action, Action <Exception> catchException) { _intervalMilliseconds = intervalMilliseconds; _action = action; _catchException = catchException; _delapyer = new MediaDelayer(); StartTask(); }
protected EatPattern(BreakDownHandler howBreakdown, BreakDownsHandler howBreakdowns, EatPatternConfig config) { _howBreakDown = howBreakdown; _howBreakDowns = howBreakdowns; _config = config; _rubbish = new Rubbish(); _stomach = new OneByOnePipeline(Digest); _enzyme = new AutoResetPipeline(Breakdown); _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); _outputElapsedStopwatch = new Stopwatch(); _foods = new Compounds <F>(config.MaxFoodStock, config.ReplaceMode, _rubbish); //食物 _nutrients = new Compounds <N>(config.MaxNutrientStock, config.ReplaceMode, _rubbish); //养分 _delapyer = new MediaDelayer(); }
/// <summary> /// /// </summary> /// <param name="single">是否为单个食物输出单个养分</param> /// <param name="foodCount">喂的食物个数</param> /// <param name="maxFoodStock">最大食物储备量</param> /// <param name="maxNutrientStock">最大养分储备量</param> /// <param name="breakDownTime">粉碎食物的时间</param> /// <param name="nutrientOutputRunTime">养分输出的执行时间</param> public SatietyTestHelper(bool single, int foodCount, int eatFoodInterval, int maxFoodStock, int maxNutrientStock, TimeRange breakDownTime, TimeRange nutrientOutputRunTime) { _single = single; _foodCount = foodCount; _eatFoodInterval = eatFoodInterval; _maxFoodStock = maxFoodStock; _maxNutrientStock = maxNutrientStock; _breakDownTime = breakDownTime; _nutrientOutputRunTime = nutrientOutputRunTime; //实际输出时间应该在指定时间上下浮动20% var nutrientOutputInterval = single ? eatFoodInterval : eatFoodInterval / _nutrientsGroupCount; _maxNutrientOutputInterval = (double)nutrientOutputInterval * 1.2; _minNutrientOutputInterval = (double)nutrientOutputInterval * 0.8; _delapyer = new MediaDelayer(); }
public void HighResolutionSleep() { const int times = 100; //运行次数 const int sleepTime = 10; //毫秒 Stopwatch watch = new Stopwatch(); MediaDelayer delayer = new MediaDelayer(); long elapsed = 0; for (var i = 0; i < times; i++) { watch.Restart(); delayer.Sleep(sleepTime); elapsed += watch.ElapsedMilliseconds; } NumericalRangeInt nri = new NumericalRangeInt(sleepTime, 0.2f); var avg = (int)(elapsed / times); Assert.IsTrue(nri.Contains(avg)); }