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