В дополнение к 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
. Пока вам не нужно фактическое время суток и просто используйте это для целей синхронизации, тогда этот подход лучше.
Спасибо, Джонатан. Я боролся с типами в D, когда я читал «Язык D» и стараюсь делать небольшие проекты, чтобы понять язык. Я никогда не делал C или C++; мой фон - Ruby и Perl с небольшим количеством Java. Следовательно, переход для меня не так естественен. Однако, с помощью gumption и помощи от хорошо осведомленных людей, таких как вы, я все же могу стать опытным! – RedMage
Не стесняйтесь задавать любые вопросы, связанные с D, или в группах новостей D (в частности, D.learn). Мы здесь, чтобы помочь. – DejanLekic