【发布时间】:2017-07-09 17:56:20
【问题描述】:
我有以下代码来显示当前时间:
static void Main(string[] args)
{
while (true)
{
ShowDate(GetTime(),GetDate());
//Here's my issue:
System.Threading.Thread.Sleep(1000);
}
}
//Clear Console and write current Date again.
static void ShowDate(String time, String date)
{
Console.Clear();
Console.WriteLine(date);
Console.WriteLine(time);
}
static string GetTime()
{
string timeNow = DateTime.Now.ToString("HH:mm:ss");
return timeNow;
}
static string GetDate()
{
string dateNow = DateTime.Now.ToString("dd.MM.yy");
return dateNow;
}
嗯,据我了解,Thread.Sleep(1000) 仅显示程序启动后每秒测量的时间。所以它没有显示完全正确的时间。我可以为Thread.Sleep() 尝试一个较低的值,但这仍然有点不准确,并且可能变得有点低效。
有没有可能的方法,例如,每次系统本身更新时间时更新时间?可能是event listener 之类的东西?
【问题讨论】:
-
“有点不准确”是什么意思?
-
你需要完成什么?
-
你的问题在于睡眠 1000,加上运行一些代码并不总是正确的。sleep(1000) 不能保证为 1000,它大约 1000 ..另外,假设你从 995 开始那 1000 秒,您将始终停留在 995 毫秒。
-
为什么需要这么精确?显示的代码足以满足 99% 的用例
-
你熟悉Nyquist–Shannon sampling theorem吗?针对这个特殊情况稍微解释一下:定义最小采样率是多少,你会认为它“足够精确”,然后使用两倍。
标签: c# multithreading timer clock