我正在尝试在D中构建一个Pomodoro计时器应用程序。我曾经使用ruby,我想进行基本的时间比较。
我尝试使用像
这样的东西auto startTime = Clock.currTime();
然后通过抓住当前时间进行比较并比较:
do{
// bla bla stuff
auto nowTime = Clock.currTime();
}while(nowTime <= (startTime + dur!"minute"(25));
然而,遗漏的方法和类型错误随之而来。有什么想法吗?
答案 0 :(得分:6)
除了确实告诉您如何修复代码的CyberShadow's answer之外,我想指出这种特殊方法不是计时器的最佳方法。除了条件变量很有可能更有意义(取决于你真正在做什么)之外,Clock.currTime
是一个错误的函数。
Clock.currTime
使用实时时钟返回时间,而使用单调时钟,时间通常更准确。对于单调时钟以外的时钟,时间可能会受到时钟变化的影响(例如,系统时钟由NTP守护进程调整几分钟)。但是,即使调整了系统时钟,单调时钟也始终以相同的速率向前移动。所以,它对于获得时间并不是很有用,但它非常适合计时。为此,你想要做更像这样的事情:
auto endTime = Clock.currSystemTick + to!TickDuration(dur!"minutes"(25));
do
{
//bla bla stuff
} while(Clock.currSystemTick < endTime);
因此,您最终会处理core.time.TickDuration
而不是std.datetime.SysTime
。只要您不需要实际的时间并且只是将其用于计时目的,那么这种方法就更好了。
答案 1 :(得分:4)
)
while
范围内声明的变量在while
条件下不可见 - 您需要将nowTime
声明移到do ... while
块之外。dur!"minutes"
,而不是"minute"
。通过这些修复,代码可以为我编译。