如何解决无法匹配C#中的时间
| 我有一个用C#编写的非常简单的程序,但是由于时间不匹配,所以循环永远不会退出。static void Main(string[] args)
{
while (Sy@R_502[email protected].Now != new Sy@R_502[email protected](2011,05,23,22,17,0))
{
}
Sy@R_502[email protected](file);
}
这个想法是,当时间滴答至指定时间时,将启动给定文件。但是,我已经用例如Windows所报告的当前时间仅提前一分钟的值测试了该程序,它不会启动该过程。我已验证Process.Start
呼叫正确。有什么建议么?
编辑:不,这不是实验或任何类似的东西。这是因为我一直在睡觉时关闭闹钟。 file
是mp3文件,我将继续打开扬声器,而且我很确定自己没有能力在睡眠中处理这个问题。我用程序解决了第一个实际问题。由于它具有特定目的,因此我认为您会同意另一种解决方案的必要性是有限的。
编辑:我没有意识到DateTime类型下降到那种精度,否则我本人会发现这一点。我认为它们只有效到秒,而且由于即使在IDE中的调试模式下循环也应该每秒运行很多次,所以我不明白为什么精确匹配是不合理的。但是,当然,如果您将其与100纳秒进行比较,那几乎是不可能的。
解决方法
你应该做
static void Main(string[] args)
{
while (System.DateTime.Now < new System.DateTime(2011,05,23,22,17,0))
{
}
System.Diagnostics.Process.Start(file);
}
因为如果您不勾选那个确切的时间,那将永远不会退出那一会儿
编辑有关为什么!=很可能无法正常工作的详细说明
所以实际上您可以编写如下代码:
static void Main(string[] args)
{
DateTime fireDate = new DateTime(2011,0);
while (System.DateTime.Now < fireDate)
{
}
System.Diagnostics.Process.Start(file);
}
正如Ben Voigt指出的那样,“ 5”比较是在“ 5” DateTime.Ticks上的“ 6”属性中进行的,这是毫秒的“ 8”。
您的循环可能不会经常执行。
,您为什么不只使用睡眠或创建计时器?
,使用ѭ9而不是!=
。
无论如何,这是等待特定时间的糟糕方式。
,这是愚人节玩笑吗?
使用ѭ9而不是!=
。
,我会改成
while (System.DateTime.Now < new System.DateTime(2011,0))
{
}
代替。尽管我也会非常警惕使用这样的紧密循环,并认为设置计划任务或某些事情会更加有效。
,将其更改为用户小于运算符。我很惊讶它错过了几秒钟的时间,但是由于这个非常精确的原因(基于Ticks
的相等),使用时间相等通常很危险。
System.DateTime.Now < otherDateTime
应该注意的是,这种“忙等待”非常浪费处理器。正如其他人指出的那样,请使用计时器或至少使线程休眠,以便处理器可以利用其时间执行其他操作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。