/// <summary> /// 异步运行指定文件 /// </summary> /// <param name="Solver"></param> public void Run(TStreamer Solver) { RunningSolvers.Add(Solver); log.Info(Solver.Name + " 开始计算。"); Solver.Run(); }
public override void Run() { List <string> failedPathes = new List <string>(); this.RunningSolvers = new System.Collections.Generic.List <IntegralGnssFileSolver>(); this.PostionReportBuilder = null; log.Info("开始初始化,加载资源等。。。"); DateTime start = DateTime.Now; //多时段探测,待做 if (BaseLineNames == null) { log.Info("外部没有输入基线,即将选择基线..."); this.BaseLineNames = BaseLineSelector.GetBaselines(OFilePathes); } // public List<BaseLineName> GetBaselineNames(string[] obsFilePaths) StringBuilder sb = new StringBuilder(); sb.AppendLine("所选基线:"); foreach (var item in BaseLineNames) { sb.AppendLine(item.ToString()); } log.Info(sb.ToString()); if (BaseLineNames.Count > 1) { MultiRun(failedPathes, BaseLineNames); } else { SingleRun(failedPathes, BaseLineNames[0]); } this.Complete(); RunningSolvers.Clear(); var span = DateTime.Now - start; log.Info("计算完毕,耗时:" + span.ToString() + ", " + span.TotalSeconds / OFilePathes.Length + " 秒/个"); if (failedPathes.Count > 0) { StringBuilder ssb = new StringBuilder(); ssb.AppendLine("失败 " + failedPathes.Count + " 个文件(请在日志[Fatal]中查找原因):"); foreach (var item in failedPathes) { ssb.AppendLine(item); } log.Fatal(ssb.ToString()); } }
public override void Run() { this.RunningSolvers = new System.Collections.Generic.List <IntegralGnssFileSolver>(); this.PostionReportBuilder = null; log.Info("开始初始化,加载资源等。。。"); DateTime start = DateTime.Now; BuildSolverAndRun(OFilePathes); this.Complete(); RunningSolvers.Clear(); var span = DateTime.Now - start; log.Info("计算完毕,耗时:" + span.ToString() + ", " + span.TotalSeconds / OFilePathes.Length + " 秒/个"); }
/// <summary> /// 计算,错误返回false。 /// </summary> /// <param name="pathes"></param> /// <returns></returns> protected override bool BuildSolverAndRun(params string[] pathes) { IntegralGnssFileSolver Solver = null; #if !DEBUG try { #endif Solver = BuildSolver(pathes); this.InitProcess(Solver.Context.ObservationDataSource.ObsInfo.Count); Solver.ResultProduced += Solver_ResultProduced; Solver.Completed += Solver_Completed; Run(Solver); log.Info(Solver.Name + " 计算完成。"); RunningSolvers.Remove(Solver); if (Solver != FisrtSolver) { Solver.Dispose(); Solver = null; } return(true); #if !DEBUG } catch (Exception ex) { var roverMsg = ""; if (Solver != null) { roverMsg = Solver.Current + ""; } var msg = Solver + ", " + roverMsg + " 计算发生致命错误:" + ex.Message + ",路径:\r\n" + path; log.Fatal(msg); if (Setting.GnsserConfig.IsDebug) { ex.Data["GNSSerMsg"] = msg; throw ex; } } #endif return(false); }
/// <summary> /// 计算,错误返回false。 /// </summary> /// <param name="fileNames"></param> /// <returns></returns> protected override bool BuildSolverAndRun(params string[] fileNames) { IntegralGnssFileSolver Solver = null; #if !DEBUG try { #endif Solver = BuildSolver(fileNames); if (Solver == null) { log.Error("GNSS 计算器创建失败!" + Geo.Utils.StringUtil.ToString(fileNames)); return(false); } Solver.Completed += Solver_Completed; Run(Solver); log.Info(Solver.Name + " 计算完成。"); RunningSolvers.Remove(Solver); if (Solver != FisrtSolver) { Solver.Dispose(); Solver = null; } return(true); #if !DEBUG } catch (Exception ex) { var roverMsg = ""; if (Solver != null) { roverMsg = Solver.Current + ""; } var msg = Solver + ", " + roverMsg + " 计算发生致命错误:" + ex.Message + ",路径:\r\n" + path; log.Fatal(msg); if (Setting.GnsserConfig.IsDebug) { ex.Data["GNSSerMsg"] = msg; throw ex; } } #endif return(false); }
/// <summary> /// 计算,错误返回false。 /// </summary> /// <param name="path"></param> /// <returns></returns> protected virtual bool BuildSolverAndRun(params string[] path) { TStreamer Solver = null; #if !DEBUG try { #endif Solver = BuildSolver(path); Solver.Completed += Solver_Completed; Run(Solver); log.Info(Solver.Name + " 计算完成。"); RunningSolvers.Remove(Solver); if (Solver != FisrtSolver) { Solver.Dispose(); Solver = null; } return(true); #if !DEBUG } catch (Exception ex) { var roverMsg = ""; if (Solver != null) { roverMsg = Solver.Current + ""; } var msg = Solver + ", " + roverMsg + " 计算发生致命错误:" + ex.Message + ",路径:\r\n" + path; log.Fatal(msg); if (Setting.GnsserConfig.IsDebug) { ex.Data["GNSSerMsg"] = msg; throw ex; } return(false); } #endif }
private void RunSingleSite() { List <string> failedPathes = new List <string>(); this.RunningSolvers = new System.Collections.Generic.List <TStreamer>(); this.PostionReportBuilder = null;// new PostionReportBuilder(this.Option, RunningSolvers[0].Context); log.Info("开始初始化,加载资源等。。。"); DateTime start = DateTime.Now; if (TotalRunnerCount > 1) { this.InitProcess(TotalRunnerCount); if (ParallelConfig.EnableParallel) { log.Info("开始并行计算,并行度:" + ParallelConfig.ParallelOptions.MaxDegreeOfParallelism); Parallel.ForEach(OFilePathes, ParallelConfig.ParallelOptions, (path, state) => { if (!BuildSolverAndRun(path)) { failedPathes.Add(path); } if (IsCancel) { state.Break(); } }); } else { log.Info("开始串行计算。"); foreach (var path in OFilePathes) { BuildSolverAndRun(path); if (IsCancel) { break; } } } } else { TStreamer Solver = null; string singlePath = OFilePathes[0]; //#if !DEBUG try { //#endif Solver = BuildSolver(singlePath); this.InitProcess(Solver.Context.ObservationDataSource.ObsInfo.Count); Solver.ResultProduced += Solver_ResultProduced; Solver.Completed += Solver_Completed; Run(Solver); //#if !DEBUG } catch (Exception ex) { if (BuildSolverAndRun(singlePath)) { failedPathes.Add(singlePath); } var roverMsg = ""; if (Solver != null) { roverMsg = Solver.Current + ""; } var msg = Solver + singlePath + ", " + roverMsg + ", 计算发生致命错误:" + ex.Message; log.Fatal(msg); if (Setting.GnsserConfig.IsDebug) { ex.Data["GNSSerMsg"] = msg; throw ex; } } //#endif } this.Complete(); RunningSolvers.Clear(); var span = DateTime.Now - start; log.Info("计算完毕,耗时:" + span.ToString() + ", " + span.TotalSeconds / TotalRunnerCount + " 秒/个"); if (failedPathes.Count > 0) { StringBuilder ssb = new StringBuilder(); ssb.AppendLine("失败 " + failedPathes.Count + " 个文件(请在日志[Fatal]中查找原因):"); foreach (var item in failedPathes) { ssb.AppendLine(item); } log.Fatal(ssb.ToString()); log.Error(ssb.ToString()); } }