मैं जिस एप्लिकेशन को लिख रहा हूं वह एक लम्बाई एल्गोरिदम करता है जो आमतौर पर समाप्त होने में कुछ मिनट लगते हैं। इस समय के दौरान मैं उपयोगकर्ता को एक प्रगति पट्टी दिखाना चाहता हूं जो इंगित करता है कि जितना संभव हो सके एल्गोरिदम कितना किया जाता है।प्रगति बार डिजाइन पैटर्न?
एल्गोरिदम कई चरणों में विभाजित है, प्रत्येक अपने विशिष्ट समय के साथ। instance-
- आरंभीकरण के लिए (500 मिली-सेकंड)
- पढ़ने आदानों (5 सेकंड)
- चरण 1 (30 सेकंड)
- चरण 2 (3 मिनट)
- लेखन आउटपुट (7 सेकंड)
- नीचे बंद (10 मिली-सेकंड)
हर कदम आर की स्थापना करके इसकी प्रगति काफी आसानी से रिपोर्ट कर सकते हैं [0 से 150] कहें और उसके मुख्य लूप में पूरा किए गए मान की रिपोर्ट करें।
जो मैंने वर्तमान में स्थापित किया है वह नेस्टेड प्रगति मॉनीटर की एक योजना है जो प्रगति रिपोर्टिंग के एक निश्चित पेड़ का एक प्रकार है।
सभी प्रगति पर नज़र रखता है एक अंतरफलक IProgressMonitor
से विरासत:
class IProgressMonitor
{
public:
void setRange(int from, int to) = 0;
void setValue(int v) = 0;
};
पेड़ की जड़ ProgressMonitor जो वास्तविक जीयूआई इंटरफ़ेस से जुड़ा है है:
class GUIBarProgressMonitor : public IProgressMonitor
{
GUIBarProgressMonitor(ProgressBarWidget *);
};
पेड़ में किसी भी अन्य नोड मॉनीटर हैं जो माता-पिता की प्रगति के टुकड़े पर नियंत्रण लेते हैं:
class SubProgressMonitor : public IProgressMonitor
{
SubProgressMonitor(IProgressMonitor *parent, int parentFrom, int parentLength)
...
};
ए SubProgressMonitor
अपने माता-पिता की श्रेणी [parentFrom, parentFrom+parentLength]
पर नियंत्रण लेता है।
इस योजना के साथ मैं वैश्विक समय में प्रत्येक चरण के अपेक्षित सापेक्ष हिस्से के अनुसार शीर्ष स्तर की प्रगति को स्थिर रूप से विभाजित करने में सक्षम हूं। प्रत्येक चरण को आगे टुकड़ों आदि में विभाजित किया जा सकता है '
इसका मुख्य नुकसान यह है कि विभाजन स्थैतिक है और रन समय पर खोजे गए चर के अनुसार परिवर्तन करने में दर्दनाक हो जाता है।
तो सवाल: क्या इस मुद्दे को हल करने वाली प्रगति निगरानी के लिए कोई ज्ञात डिज़ाइन पैटर्न हैं?