मेरे पास एक ऐसा एप्लिकेशन है जो पृष्ठभूमि कार्य करते समय, "अनुमानित समय शेष" गणना (जैसे "5 सेकंड शेष") और "पूरा होने का अनुमानित समय" (उदाहरण के लिए "12:59 बजे पूरा होता है) के साथ एक प्रगति पट्टी दिखाता है। : 5 9 "), या जैसा कि मैंने इसे बुलाया, ईटीए।मैं अपने "अनुमानित समय शेष" (और ईटीए) गणना से "जिटर" को कैसे हटा सकता हूं?
इस ईटीए की गणना के लिए एल्गोरिदम मूल रूप से समय के साथ प्रगति के "रोलिंग औसत" लेता है:
1. प्रत्येक प्रगति घटना वर्तमान समय के साथ एक कतार में जोड़ दी जाती है।
2. एक निश्चित अवधि (उदाहरण के लिए 10 एस) के बाद, कतार से आइटम हटा दिए जाते हैं।
3. ईटीए कतार में पहली और आखिरी वस्तुओं से निकाला गया है।
स्रोत कोड उपलब्ध है अगर आप परवाह: ETACalculator.cs
हालांकि, वहाँ एक घबराना समस्या है। चूंकि प्रत्येक प्रगति घटना गणना में जोड़ दी जाती है, इसलिए ईटीए को थोड़ा अपडेट किया जाएगा। मान लें कि ईटीए केवल 0.1s
द्वारा बदलता है। यह छोटा जिटर आसानी से ईटीए को "फटकार" का कारण बनता है। उदाहरण के लिए, 5s, 4s, 3s, आदि से एक चिकनी प्रगति देखने के बजाय ..., मुझे 5-5-5-4-5-4-5-4-5-4-4-4 दिखाई देता है।
मैं केवल 1-प्रति-सेकंड के अपडेट को कम करने के बारे में सोच रहा था, लेकिन फिर प्रगति पट्टी कम चिकनी है, और मैं भी वास्तव में "वास्तविक" मंदी को वास्तविक समय दिखाऊंगा।
मुझे एक साधारण एल्गोरिदम के साथ आने में परेशानी हो रही है जो इस अजीब जिटर को कम कर देता है। मैं जिटर को कैसे हटा सकता हूं?
विनफॉर्म? WPF? कुछ और? क्या आप प्रासंगिक कोड पोस्ट कर सकते हैं? – Oded
Obligatory [xkcd संदर्भ] (http://xkcd.com/612/)। – Ani
यदि यह कम हो गया है तो केवल प्रगति को अपडेट करें। (यानी हम वर्तमान में 4 पर वापस नहीं आते हैं)। –