【发布时间】:2015-04-07 20:20:35
【问题描述】:
class Program
{
static void Main(string[] args)
{
const string PATH = @"C:\My_PATH\";
const string FILE_NAME = "data_acquistion2";
const string DATETIME_STOP_RECORD = "01-04-15 17:18";
bool fichierNonExistant = false;
PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;`
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
string actualPeriod = "";
if (!File.Exists(PATH + FILE_NAME + ".csv"))
{
FileStream myFs = File.Create(PATH + FILE_NAME + ".csv");
fichierNonExistant = true;
myFs.Close();
}
StreamWriter myWriter = new StreamWriter(PATH + FILE_NAME + ".csv", true);
if (fichierNonExistant == true)
{
myWriter.WriteLine("CPU Used (%)" + "," + "RAM Free (%)" + "," + "Hour and record Date");
}
while (actualPeriod != DATETIME_STOP_RECORD)
{
actualPeriod = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
// Console.WriteLine(periodeActuelle);
myWriter.WriteLine(cpuCounter.NextValue() + "," + ramCounter.NextValue() + "," + actualPeriod);
Thread.Sleep(20000); //If I add this the program doesn't write in the csv file
}
}
}`
嗨,
我在 C# 中遇到 Thread.Sleep 的问题,我开发了一个代码,用于将 % CPU(已使用)和 RAM 直接写入 csv 文件。
它可以毫无延迟地工作,但我想每 20 秒写入一次这个值,这就是我需要使用 Thread.Sleep(20000) 的原因。 我也试过Task.Delay,我也有同样的问题。
【问题讨论】:
-
什么是“不起作用”和“问题就在这里”是什么意思? 发生了什么?你期望会发生什么?
-
不相关,但我发现它不太可能退出,因为
!=比较字符串; IMO 你应该将actualPeriod保留为DateTime并使用< -
DATETIME_STOP_RECORD不包括秒,但actualPeriod包括。所以这将永远循环。此外,根据您当前的文化,-和/之间也可能存在差异。最好的办法是听 Marc 并比较DateTimes。 -
Marc Gravell 是对的。将
"dd/MM/yy HH:mm:ss"与"01-04-15 17:18"进行比较会让你陷入无限循环... -
@Ironboy07 听起来只是一个冲洗问题...您是否尝试过使用
File.AppendText而不是保持作家开放?
标签: c# timeout console-application