डी

2011-12-24 8 views
5

में समय तुलना डी में एक पोमोडोरो टाइमर ऐप बनाने की कोशिश कर रहा है। इसलिए रूबी के लिए उपयोग किया जाता है, मैं बुनियादी समय तुलना करना चाहता हूं।डी

मैं की तरह

auto startTime = Clock.currTime(); 

और फिर वर्तमान समय हथियाने और की तुलना द्वारा की तुलना कुछ उपयोग करने की कोशिश:

do{ 

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

हालांकि, लापता विधि और प्रकार त्रुटियों पीछा। कोई विचार?

उत्तर

6

CyberShadow's answer के अलावा जो आपको वास्तव में बताता है कि आपके कोड को कैसे ठीक किया जाए, मैं यह इंगित करता हूं कि यह विशेष दृष्टिकोण टाइमर के लिए सबसे अच्छा तरीका नहीं है। इस तथ्य के अलावा कि एक अच्छा मौका है कि एक शर्त चर अधिक समझदार होगा (आप वास्तव में क्या कर रहे हैं इसके आधार पर), Clock.currTime उपयोग करने के लिए गलत कार्य है।

Clock.currTime वास्तविक समय घड़ी का उपयोग करके समय लौटाता है, जबकि समय आम तौर पर एक monotonic घड़ी के साथ अधिक सटीक होने जा रहा है। एक monotonic घड़ी के अलावा घड़ियों के साथ, समय घड़ी में परिवर्तन से प्रभावित हो सकता है (उदाहरण के लिए सिस्टम घड़ी एनटीपी डिमन द्वारा कुछ मिनटों द्वारा समायोजित हो जाता है)। हालांकि, एक monotonic घड़ी हमेशा एक ही दर पर आगे बढ़ती है, भले ही सिस्टम घड़ी समायोजित हो। तो, यह समय प्राप्त करने के लिए बहुत उपयोगी नहीं है, लेकिन यह समय सामान के लिए एकदम सही है। उसके लिए, तो आप इस तरह के और अधिक कुछ करना चाहता हूँ चाहते हैं:

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

तो, आप अंत core.time.TickDuration बजाय std.datetime.SysTime गिर्द घूमती है। जब तक आपको दिन के वास्तविक समय की आवश्यकता नहीं होती है और केवल समय के प्रयोजनों के लिए इसका उपयोग कर रहे हैं, तो यह दृष्टिकोण बेहतर है।

+0

धन्यवाद, जोनाथन। मैं डी में टाइप के साथ संघर्ष कर रहा हूं जैसा कि मैंने "द डी लैंग्वेज" के माध्यम से पढ़ा है और भाषा की समझ हासिल करने के लिए छोटी परियोजनाएं करने की कोशिश की है। मैंने सी या सी ++ कभी नहीं किया; मेरी पृष्ठभूमि जावा की एक छोटी राशि के साथ रूबी और पर्ल है। इसलिए, संक्रमण मेरे लिए प्राकृतिक नहीं है। हालांकि, गम्प्शन के साथ, और अपने जैसे जानकार लोक से मदद, मैं अभी भी कुशल बन सकता हूं! – RedMage

+2

किसी भी डी-संबंधित प्रश्न, या डी न्यूज ग्रुप (विशेष रूप से डी। एलर्न) पर पूछने के लिए शर्मिंदा न हों। हम यहाँ मदद करने के लिए हैं। – DejanLekic

4
  1. आप एक )
  2. चर एक while दायरे के अंदर घोषित भूल रहे हैं while हालत को दिखाई नहीं कर रहे हैं - आप do ... while ब्लॉक के बाहर nowTime घोषणा बढ़ने की जरूरत है।
  3. यह dur!"minutes" होना चाहिए, "minute" नहीं होना चाहिए।

इन सुधारों के साथ, कोड मेरे लिए ठीक संकलित करता है।

+0

स्कोप समस्या, साइबरशैडो को इंगित करने के लिए धन्यवाद। – RedMage