void Run() { try { while (true) { if (HardwareMonitor.RefreshValues() == false) { // Miner crashed Log.Event("Miner crashed"); Miner.instance.Stop(); return; } onValueUpdated?.Invoke(); if (HardwareMonitor.percentTotalCPU - HardwareMonitor.percentMinerCPU > Miner.instance.currentTargetCpu) { // Something else is using the entire budget Log.Event($"Miner killed by competing app: target: {Miner.instance.currentTargetCpu} with {HardwareMonitor.percentTotalCPU - HardwareMonitor.percentMinerCPU:p4} consumed by other apps. Miner was at {HardwareMonitor.percentMinerCPU:p4}"); Miner.instance.Stop(); return; } UpdateSleepFor(); Thread.Sleep(100); } } catch (Exception e) { Log.Exception(e); } }
void Refresh( object sender, ElapsedEventArgs eargs) { try { if (HardwareMonitor.RefreshValues() == false && Miner.instance.isMinerRunning) { // Miner crashed Log.Info("Miner crashed"); Miner.instance.Stop(); return; } onValueUpdated?.Invoke(); if (HardwareMonitor.isMinerDataReady) { if (HardwareMonitor.percentTotalCPU - HardwareMonitor.percentMinerCPU > Miner.instance.currentTargetCpu) { // Something else is using the entire budget consistently for at least 2 seconds (sleep by 1) if (DateTime.Now - last > TimeSpan.FromSeconds(1.5)) { Log.Info($"Miner killed by competing app: target: {Miner.instance.currentTargetCpu} with {HardwareMonitor.percentTotalCPU - HardwareMonitor.percentMinerCPU:p4} consumed by other apps. Miner was at {HardwareMonitor.percentMinerCPU:p4}"); Miner.instance.Stop(); return; } } else { last = DateTime.Now; } UpdateSleepFor(); } else { last = DateTime.Now; } } catch (Exception e) { Log.Error(e); } }
void Timer_Elapsed( object sender, ElapsedEventArgs e) { if ( // Not already running Miner.instance.isMinerRunning == false // User has not touched keyboard or mouse in awhile && Miner.instance.isCurrentlyIdle // The miner did not recently shut down (prevents frequent on/off issues) && Miner.instance.timeSinceLastStopped > TimeSpan.FromMinutes(1)) { HardwareMonitor.RefreshValues(); if (// The cpu is not already over our max Miner.instance.settings.minerConfig.maxCpuWhileIdle > HardwareMonitor.percentTotalCPU) { Miner.instance.Start(false); } } }