/// <summary> /// Запускает программы с возможностью параллельного выполнения. /// </summary> /// <param name="programms">Программы для ПМБР.</param> public void StartParallel(RegisterProgramCollection programs) { if (programs == null) throw new ArgumentNullException("Коллекция программ не может быть неопределенной"); if (programs.Count == 0) throw new ArgumentException("Коллекция программ не может быть пустой"); if (_manager != null) throw new Exception("ПМБР уже запущена"); _manager = new RegisterThreadManager(_registers, programs); _manager.BreakPoints = _breakPoints; _manager.OnComplete += _manager_OnComplete; _manager.ValueOut += _manager_ValueOut; _manager.ValueIn += _manager_ValueIn; _manager.StepCompleted += _manager_StepCompleted; _manager.BreakPointReached += _manager_BreakPointReached; _manager.RunEntryPoint(programs.GetEntry().Id); }
/// <summary> /// Запускает классическую МБР в режиме пошагового выполнения. /// </summary> /// <param name="ops">Список операций для выполнения.</param> public void StartManual(List<Operation> ops) { if (ops == null) throw new ArgumentNullException("Коллекция операций не может быть неопределенной"); if (ops.Count == 0) throw new ArgumentException("Коллекция операций не может быть пустой"); if (_manager != null) throw new Exception("МБР уже запущена"); RegisterProgram mainProg = new RegisterProgram(ops.Cast<RegisterOperation>().ToList().ToArray(), 0, "classic", true); RegisterProgramCollection programs = new RegisterProgramCollection(); programs.Add(mainProg); _manager = new RegisterThreadManager(_registers, programs); _manager.BreakPoints = _breakPoints; _manager.OnComplete += _manager_OnComplete; _manager.BreakPointReached += _manager_BreakPointReached; _manager.RunEntryPoint(0); }