ntminer 6 years ago
parent
commit
f5b81ffbd4

+ 1 - 1
src/AppModels/Vms/StartStopMineButtonViewModel.cs

@@ -25,7 +25,7 @@ namespace NTMiner.Vms {
                     this.MinerProfile.IsMining = false;
                 }
                 NTMinerRoot.IsAutoStartCanceled = true;
-                NTMinerRoot.Instance.StopMineAsync(() => {
+                NTMinerRoot.Instance.StopMineAsync("UserAction", () => {
                     if (!NTMinerRoot.Instance.IsMining) {
                         this.MinerProfile.IsMining = false;
                     }

+ 32 - 0
src/AppViews0/MainWindow.xaml.cs

@@ -230,6 +230,9 @@ namespace NTMiner.Views {
         private int cpuPerformance = 0;
         private int cpuTemperature = 0;
         private bool isFirstRefreshCpu = true;
+        private int _highTemperatureCount = 0;
+        private int _lowTemperatureCount = 0;
+        const string StopedByCpuTemperature = "StopedByCpuTemperature";
         private void RefreshCpu() {
             if (isFirstRefreshCpu) {
                 isFirstRefreshCpu = false;
@@ -270,6 +273,35 @@ namespace NTMiner.Views {
                     cpuTemperature = temperature;
                     Vm.StateBarVm.CpuTemperatureText = temperature.ToString() + " ℃";
                 }
+                if (Vm.MinerProfile.IsAutoStopByCpu) {
+                    if (NTMinerRoot.Instance.IsMining) {
+                        if (temperature >= Vm.MinerProfile.CpuStopTemperature) {
+                            _highTemperatureCount++;
+                        }
+                        else {
+                            _highTemperatureCount = 0;
+                        }
+                        if (_highTemperatureCount >= Vm.MinerProfile.CpuGETemperatureSeconds) {
+                            _highTemperatureCount = 0;
+                            NTMinerRoot.Instance.StopMineAsync(StopedByCpuTemperature);
+                        }
+                    }
+                    else {
+                        _highTemperatureCount = 0;
+                        if (Vm.MinerProfile.IsAutoStartByCpu && NTMinerRoot.Instance.StopReason == StopedByCpuTemperature) {
+                            if (temperature <= Vm.MinerProfile.CpuStartTemperature) {
+                                _lowTemperatureCount++;
+                            }
+                            else {
+                                _lowTemperatureCount = 0;
+                            }
+                            if (_lowTemperatureCount >= Vm.MinerProfile.CpuLETemperatureSeconds) {
+                                _lowTemperatureCount = 0;
+                                NTMinerRoot.Instance.StartMine();
+                            }
+                        }
+                    }
+                }
             }
         }
 

+ 1 - 1
src/MinerClientSelfHost/MinerClientController.cs

@@ -59,7 +59,7 @@ namespace NTMiner {
                 return ResponseBase.InvalidInput("参数错误");
             }
             try {
-                NTMinerRoot.Instance.StopMineAsync();
+                NTMinerRoot.Instance.StopMineAsync("RPC");
                 return ResponseBase.Ok();
             }
             catch (Exception e) {

+ 2 - 1
src/NTMiner/INTMinerRoot.cs

@@ -32,7 +32,8 @@ namespace NTMiner {
 
         void RestartMine(bool isWork = false);
 
-        void StopMineAsync(Action callback = null);
+        string StopReason { get; }
+        void StopMineAsync(string stopReason, Action callback = null);
 
         IMineContext CurrentMineContext { get; }
 

+ 8 - 6
src/NTMiner/NTMinerRoot.cs

@@ -454,23 +454,25 @@ namespace NTMiner {
         #region Exit
         public void Exit() {
             if (_currentMineContext != null) {
-                StopMine();
+                StopMine(stopReason: "Exit");
             }
         }
         #endregion
 
+        public string StopReason { get; private set; }
         #region StopMine
-        public void StopMineAsync(Action callback = null) {
+        public void StopMineAsync(string stopReason, Action callback = null) {
             if (!IsMining) {
                 callback?.Invoke();
                 return;
             }
             Task.Factory.StartNew(() => {
-                StopMine();
+                StopMine(stopReason);
                 callback?.Invoke();
             });
         }
-        private void StopMine() {
+        private void StopMine(string stopReason) {
+            this.StopReason = stopReason;
             if (!IsMining) {
                 return;
             }
@@ -504,7 +506,7 @@ namespace NTMiner {
                 StartMine(isRestart: true);
             }
             else {
-                this.StopMineAsync(() => {
+                this.StopMineAsync("RestartMine", () => {
                     Logger.EventWriteLine("正在重启内核");
                     if (isWork) {
                         ContextReInit(true);
@@ -595,7 +597,7 @@ namespace NTMiner {
                     return;
                 }
                 if (IsMining) {
-                    this.StopMine();
+                    this.StopMine(stopReason: "StartMine");
                 }
                 string packageZipFileFullName = Path.Combine(SpecialPath.PackagesDirFullName, kernel.Package);
                 if (!File.Exists(packageZipFileFullName)) {

+ 1 - 1
src/NTMiner/NTMinerRoot.partials.MinerProcess.cs

@@ -145,7 +145,7 @@ namespace NTMiner {
                                         Instance.CurrentMineContext.AutoRestartKernelCount = mineContext.AutoRestartKernelCount;
                                     }
                                     else {
-                                        Instance.StopMineAsync();
+                                        Instance.StopMineAsync(stopReason: "KernelProcessLost");
                                     }
                                     if (_kernelProcessDaemon != null) {
                                         VirtualRoot.UnPath(_kernelProcessDaemon);