Я пытаюсь написать очень рудиментарную программу, которая проверяет использование моего процессора и плунжера и сообщает мне о текущем времени безотказной работы. Если процессор или барабан превышают определенный порог, он устно объявит об этом и предупредит меня. Я пытаюсь использовать TimeSpan для автоматического увеличения времени работы системы от секунд до нескольких дней, часов, минут, секунд. Когда я запускаю код, он говорит 0 дней 0 часов 0 минут и 0 секунд. Тем не менее, он объявляет его правильно в hourswhen, я не использую TimeSpan.C# сталкивается с проблемами с TimeSpan. Преобразование времени безотказной работы в секундах/днях
#region My Performace Counters
//this pulls the current cpu load in %
PerformanceCounter perfCpuCount = new PerformanceCounter("Processor Information", "% Processor Time", "_Total");
//this pulls the available memory in MBytes
PerformanceCounter perfAvailableMemoryCount = new PerformanceCounter("Memory", "Available MBytes");
//this shows the systems uptime (in seconds)
PerformanceCounter perfUptimeCount = new PerformanceCounter("System", "System Up Time");
#endregion
TimeSpan uptimeSpan = TimeSpan.FromSeconds(perfUptimeCount.NextValue());
string systemUptimeMessage = string.Format("The current system uptime is {0} days {1} hours {2} minutes and {3} seconds",
uptimeSpan.TotalDays,
uptimeSpan.TotalHours,
uptimeSpan.TotalMinutes,
uptimeSpan.TotalSeconds
);
Console.WriteLine("{0}", systemUptimeMessage);
//tell the user what the current system uptime is
synth.Speak(systemUptimeMessage);
Как только я запустил эту порцию, он просто сообщает мне 0,0,0,0 для дней, часов, минут и секунд. Тем не менее, если я продолжу следующую часть, я смогу успешно запустить работоспособность системы в часах.
//infinte While loop
while(true)
{
//get the current performance values
int currentCpuPercentage = (int)perfCpuCount.NextValue();
int currentAvailableMemory = (int)perfAvailableMemoryCount.NextValue()/1024;
int currentUptime = (int)perfUptimeCount.NextValue()/3600;
//Every 1 Second prints the cpu load (%) and available mem (GB) to screen
Console.WriteLine("Cpu Load : {0}%", currentCpuPercentage);
Console.WriteLine("Available Memory: {0} Gigabytes", currentAvailableMemory);
Console.WriteLine("System Uptime : {0} hours", currentUptime);
//if cpu is over 80 percent, vocally say the current percent
if(currentCpuPercentage > 80)
{
if (currentCpuPercentage == 100)
{
string cpuLoadVocalMessage = String.Format("You're CPU is about to catch fire!");
synth.Speak(cpuLoadVocalMessage);
}
else
{
string cpuLoadVocalMessage = String.Format("The current CPU load is {0} percent", (int)currentCpuPercentage);
synth.Speak(cpuLoadVocalMessage);
}
}
//if available memory is less than 1 vocally say the current available memory
if(currentAvailableMemory < 1)
{
string memAvailVocalMessage = String.Format("The current available Memory is {0} Gigabytes", (int)currentAvailableMemory);
synth.Speak(memAvailVocalMessage);
}
Thread.Sleep(1000);
//just an extra space
Console.WriteLine();
//end of loop
}
Я не намерен сохранить сообщение безотказной работы в цикле While, я просто оставить его там, чтобы проверить, если я получаю правильное время (который я). Я мог бы легко оставить его таким, как есть, и просто проверять его часами, погружая время в секундах на 3600, однако я просто хотел бы понять, что я делаю неправильно в TimeSpan. Я очень новичок во всем этом. Поэтому я извиняюсь, если я говорю глупо, спрашивая об этом.
Спасибо за любую помощь, которую вы можете предложить.
спасибо. Думаю, я понял это с этой помощью. Если бы я понял это правильно, мне нужно было вызвать nextvalue один раз, прежде чем я попытался поместить его в TimeSpan. Сейчас он работает, по крайней мере, поэтому я предполагаю, что это было правильно. Еще раз спасибо. – dusty24