2011-12-24 20 views
5

Dのポモドーロ・タイマー・アプリケーションを構築しようとしています。それで、ルビーに使用されたので、私は基本的な時間比較を行いたいと思います。Dの時間比較D

私は

auto startTime = Clock.currTime(); 

のようなものを使用し、現在の時刻をつかんで比較することにより、比較しようとした:

do{ 

// bla bla stuff 
    auto nowTime = Clock.currTime(); 
}while(nowTime <= (startTime + dur!"minute"(25)); 

しかし、行方不明の方法とタイプのエラーが続いて起こります。何か案は?あなたはwhileスコープ内で宣言)

  • 変数が欠落している

  • 答えて

    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を扱って終わります。あなたが実際の時刻を必要とせず、タイミング目的にこれを使用している限り、この方法はより良い方法です。

    +0

    ありがとう、ジョナサン。私は「D言語」を読んで、その言語の理解を深めるためのプロジェクトをほとんどやっていないので、D言語の型に苦しんでいます。私はCやC++をしたことはありません。私の背景はRubyとPerlであり、少量のJavaしかありません。したがって、移行は私にとって自然ではありません。しかし、ガムプションと知識豊かな人々からの助けを借りて、私はまだ堪能になるかもしれません! – RedMage

    +2

    ここにあるD関連の​​質問やDニュースグループ(特にD.learn)に尋ねないでください。私たちは助けに来ています。 – DejanLekic

    4
    1. while条件には表示されません - あなたはdo ... whileブロックの外側でnowTime宣言を移動する必要があります。
    2. dur!"minutes"で、"minute"ではありません。

    これらの修正により、コードは私にとってうまくコンパイルされます。

    +0

    サイバーシャドウの範囲に関する問題を指摘していただきありがとうございます。 – RedMage