ProcWorkerBase.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using CliWrap;
  2. using Ips.CorAlgorithm;
  3. using Ips.Library.Entity;
  4. using Ips.Library.SvrHub;
  5. using Ips.Sps.Scheduling.Entities;
  6. using Ips.Sps.Scheduling.SigAds;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using static DevExpress.Xpo.Helpers.AssociatedCollectionCriteriaHelper;
  13. namespace Ips.Sps.Scheduling.SigProces
  14. {
  15. public abstract class ProcWorkerBase
  16. {
  17. public ProcWorkerBase(RunTsk tsk)
  18. {
  19. CurrentTsk = tsk;
  20. }
  21. public RunTsk CurrentTsk { get; protected set; }
  22. public event EventHandler<ProcSigCompeletedEventArgs> ProcSigCompleted;
  23. public abstract void Execute(AdSigResult adResult, CancellationToken token);
  24. protected virtual void OnProcSigCompleted(ProcSigCompeletedEventArgs arg)
  25. {
  26. ProcSigCompleted?.Invoke(this, arg);
  27. }
  28. protected virtual ExeResult<CorResult[]> SigCor(AdSigResult adRes, RunSig sig, string file1, string file2, CorOptions corOption, CancellationToken token)
  29. {
  30. ExeResult<CorResult[]> corExeResult;
  31. //如果小于101k,使用CPU参估,否则使用GPU
  32. if (sig.BandWidth < 101000)
  33. {
  34. corExeResult = CocUtil.Calc(file1, file2, corOption, token: token).Result;
  35. }
  36. else
  37. {
  38. //var svr = SvrHub.Instance.GetRandomOne(EnumSvrType.GpuSvr);
  39. var svr = SvrHub.Instance.GetRandomOne(EnumSvrType.CpuSvr);
  40. string url = svr.BaseHttpAddr.AppendUrlSuffix("api/cg/start");
  41. var dto = new CorParams()
  42. {
  43. AdFileDownloadUrl = adRes.AdFileDownloadUrl,
  44. File1 = file1,
  45. File2 = file2,
  46. AddZero = corOption.AddZero,
  47. DataLen = corOption.DataLen,
  48. DfoCorr = corOption.DfoCorr,
  49. DfoRange = corOption.DfoRange,
  50. DtoCenter = corOption.DtoCenter,
  51. DtoCorr = corOption.DtoCorr,
  52. DtoRange = corOption.DtoRange,
  53. Fs = corOption.Fs,
  54. MergeType = corOption.MergeType,
  55. OffsetType = corOption.OffsetType,
  56. Snr = corOption.Snr,
  57. TimeOffset = corOption.TimeOffset,
  58. Timeslots = corOption.Timeslots,
  59. };
  60. var ajaxRes = HttpHelper.PostRequestAsync<CorResult[]>(url, dto, token).Result;
  61. if (ajaxRes.code != 200)
  62. {
  63. throw new Exception(ajaxRes.msg);
  64. }
  65. return ExeResult.Create(ajaxRes.data, "", DateTime.Now, DateTime.Now, 0, "");
  66. ////#warning 强制停止有时会蓝屏,先不强制停止
  67. //corExeResult = CogUtil.Calc(file1, file2, corOption, token: token).Result;
  68. ////corExeResult = CorGpuUtil.Calc(file1, file2, corOption).Result;
  69. }
  70. return corExeResult;
  71. }
  72. }
  73. }