2011-12-24 6 views
5

D에 pomodoro 타이머 앱을 만들려고 했으므로 루비를 사용하여 기본 시간 비교를하고 싶습니다. 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

    고마워요, 조나단. 저는 "The D Language"를 읽고 언어에 대한 이해를 얻으려는 작은 프로젝트를 시도하면서 D 유형을 연구하는 데 어려움을 겪고 있습니다. 나는 C 나 C++을 한 적이 없다. 내 배경은 자바와 소량의 루비와 펄이다. 따라서 전환은 자연스러운 것이 아닙니다. 그러나, 자살과 지식이 풍부한 사람들로부터 도움을 받으면 나는 아직 능숙해질 수 있습니다! – RedMage

    +2

    여기 D 관련 질문이나 D 뉴스 그룹 (특히 Dlearn)에게 질문하는 것을 부끄러워하지 마십시오. 우리는 돕기 위해 왔습니다. – DejanLekic

    4
    1. while 상태로 표시되지 않습니다 - 당신이 do ... while 블록의 외부 nowTime 선언을 이동해야합니다.
    2. "minute"이 아닌 dur!"minutes"이어야합니다.

    이 수정 프로그램을 사용하면 코드가 올바르게 컴파일됩니다.

    +0

    CyberShadow의 범위 문제를 지적 해 주셔서 감사합니다. – RedMage