2011-12-24 42 views
5

Cố gắng xây dựng một ứng dụng hẹn giờ pomodoro trong D. Vì vậy, sử dụng để ruby, tôi muốn làm so sánh thời gian cơ bản.So sánh thời gian trong D

tôi đã cố gắng sử dụng một cái gì đó giống như

auto startTime = Clock.currTime(); 

Và sau đó so sánh bằng cách lấy thời gian hiện tại và so sánh:

do{ 

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

Tuy nhiên, phương pháp thiếu và gõ sai sót xảy ra. Bất kỳ ý tưởng?

Trả lời

6

Ngoài CyberShadow's answer thực sự cho bạn biết cách sửa mã của bạn, tôi sẽ chỉ ra rằng cách tiếp cận đặc biệt này không phải là cách tiếp cận tốt nhất cho bộ hẹn giờ. Bên cạnh thực tế là có một cơ hội tốt mà một biến điều kiện sẽ có ý nghĩa hơn (tùy thuộc vào những gì bạn đang thực sự làm), Clock.currTime là chức năng sai để sử dụng.

Clock.currTime trả về thời gian bằng đồng hồ thời gian thực, trong khi thời gian nói chung sẽ chính xác hơn với đồng hồ đơn điệu. Với đồng hồ khác ngoài đồng hồ đơn điệu, thời gian có thể bị ảnh hưởng bởi những thay đổi đối với đồng hồ (ví dụ: đồng hồ hệ thống được điều chỉnh bởi một vài phút bằng trình nền NTP). Tuy nhiên, một đồng hồ đơn điệu luôn di chuyển về phía trước với cùng tốc độ, ngay cả khi đồng hồ hệ thống được điều chỉnh. Vì vậy, nó không phải là rất hữu ích để có được thời gian, nhưng nó là hoàn hảo cho các công cụ thời gian. Cho rằng, bạn muốn làm một cái gì đó như thế này:

auto endTime = Clock.currSystemTick + to!TickDuration(dur!"minutes"(25)); 
do 
{ 
    //bla bla stuff 
} while(Clock.currSystemTick < endTime); 

Vì vậy, bạn kết thúc đối phó với core.time.TickDuration thay vì std.datetime.SysTime. Miễn là bạn không cần thời gian thực tế trong ngày và chỉ sử dụng nó cho mục đích thời gian, thì cách tiếp cận này tốt hơn.

+0

Cảm ơn bạn, Jonathan. Tôi đã đấu tranh với các loại trong D khi tôi đọc qua "Ngôn ngữ D" và cố gắng làm những dự án nhỏ để đạt được một sự hiểu biết về ngôn ngữ. Tôi chưa bao giờ làm C hoặc C++; nền của tôi là Ruby và Perl với một lượng nhỏ Java. Do đó, quá trình chuyển đổi không phải là điều tự nhiên đối với tôi. Tuy nhiên, với sự tiêu thụ, và giúp đỡ từ những người dân hiểu biết như bản thân mình, tôi có thể trở nên thành thạo! – RedMage

+2

Đừng ngần ngại hỏi bất kỳ câu hỏi nào liên quan đến D ở đây, hoặc trên các nhóm tin D (đặc biệt là D.learn). chúng tôi ở đây để giúp đỡ. – DejanLekic

4
  1. Bạn đang thiếu một )
  2. biến khai báo bên trong một phạm vi while là không hiển thị cho điều kiện while - bạn cần phải di chuyển tờ khai nowTime bên ngoài của khối do ... while.
  3. Phải là dur!"minutes", không phải "minute".

Với các bản sửa lỗi này, mã biên dịch tốt cho tôi.

+0

Cảm ơn bạn đã chỉ ra vấn đề phạm vi, CyberShadow. – RedMage

Các vấn đề liên quan