public SimulationStatus InicializeModuleByStream(System.IO.Stream XMLInputstream)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(TS_Descriptor));
            try
            {
                using (XmlReader reader = XmlReader.Create(XMLInputstream))
                {
                    InputDescriptor = (TS_Descriptor)serializer.Deserialize(reader);
                }
            }
            catch (Exception e)
            {
                return SimulationStatus.Corrupted;
            }

            try
            {
                SimulatorViewModel.SimulatorModel = new TS_SimulatorModel();
                SimulatorViewModel.SimulatorModel.CreateSimulatorDomain(InputDescriptor);
                SimulatorViewModel.InputDescriptor = InputDescriptor;
            }
            catch (Exception e)
            {
                return SimulationStatus.Corrupted;
            }


            return SimulationStatus.Runnable;
        }
        public Metrics(TS_SimulatorModel simulatorModel, TS_Descriptor descriptor)
        {
            this.simulatorModel = simulatorModel;

            avarageOverheadTimeInOneThousandthMs = (double)descriptor.AvarageOverheadTime/1000.0;
            countOfMillisecondsWhereProcessWasRunning = countOfMillisecondsWhereProcessWasNotRunning = 0;
            countOfContextSwitchings = CountOfTaskSchedulings = 0;
        }
        public void CreateSimulatorDomain(TS_Descriptor descriptor)
        {
            // erőforrások létrehozása
            foreach (ResourceDescriptor resourceDescriptor in descriptor.Resources)
            {
                Resource resource = new Resource(resourceDescriptor, this);
                Resources.Add(resource);
            }
            // processzek létrehozása és használt erőforrásainak ellenőrzése
            foreach (ProcessDescriptor processDescriptor in descriptor.Processes)
            {
                Process process = new Process(this, MyCloner.DeepClone<ProcessDescriptor>(processDescriptor), Resources);
                InitialProcessList.Add(process);
            }

            Metrics = new Metrics(this, descriptor);

            LoadSchedulerAlgorithm(descriptor.SchedulerAlgorithm);

            Process runningProcess = ArrivedProcesses.FirstOrDefault(x => x.ProcessStatus == ProcessStatusEnum.Running);
            GanntHistory.AddToHistory(ActualStep, runningProcess, queue);

            InitiateProcesses();
            RunSchedulerIfNecassary();
        }