में विशिष्ट समय के बाद पाश मैं अपने प्रोजेक्ट (सी #, VS2010, .NET 4.0) है कि एक विशेष for
पाश 200 मिलीसेकेंड के भीतर समाप्त करना चाहिए में एक आवश्यकता है। यदि ऐसा नहीं होता है तो शेष अवधि को निष्पादित किए बिना इस अवधि के बाद इसे समाप्त करना होगा। लूप आमतौर पर i = 0
के लिए लगभग 500,000 से 700,000 तक जाता है, इसलिए कुल लूप समय भिन्न होता है।बाहर निकलें सी #
मैं निम्नलिखित प्रश्न जो समान हैं पढ़ा है, लेकिन वे मेरे मामले में मदद नहीं की:
- What is the best way to exit out of a loop after an elapsed time of 30ms in C++
- How to execute the loop for specific time
अब तक मैं ट्रैक करने के लिए एक Stopwatch
वस्तु का उपयोग कर की कोशिश की है विलुप्त समय लेकिन यह मेरे लिए काम नहीं कर रहा है।
विधि 1.for
पाश के भीतर बीता हुआ समय की तुलना करना:: यहाँ 2 अलग अलग तरीकों मैं अब तक की कोशिश की है कर रहे हैं
Stopwatch sw = new Stopwatch();
sw.Start();
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
break;
}
sw.Stop();
यह काम नहीं करता क्योंकि if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
पूरा करने के लिए 200 से अधिक मिलीसेकेंड लेता है। इसलिए मेरे मामले में बेकार। मुझे यकीन नहीं है कि TimeSpan.FromMilliseconds()
आमतौर पर यह लंबा लगता है या यह किसी कारण से मेरे मामले में है।
विधि 2. समय की तुलना करने के एक अलग थ्रेड बनाना:
Stopwatch sw = new Stopwatch();
sw.Start();
bool bDoExit = false;
int msLimit = 200;
System.Threading.ThreadPool.QueueUserWorkItem((x) =>
{
while (bDoExit == false)
{
if (sw.Elapsed.Milliseconds > msLimit)
{
bDoExit = true;
sw.Stop();
}
System.Threading.Thread.Sleep(10);
}
});
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (bDoExit == true)
break;
}
sw.Stop();
मैं में कुछ अन्य कोड है पाश है कि कुछ आंकड़े प्रिंट के लिए। यह मुझे बताता है कि विधि 2 के मामले में, for
लूप निश्चित रूप से सभी पुनरावृत्तियों को पूरा करने से पहले टूट जाता है लेकिन लूप समय अभी भी 280-300 मिलीसेकंड है।
200 मिलीसेकंड या उससे कम के साथ सख्ती से लूप को तोड़ने के लिए कोई सुझाव? धन्यवाद।
उस लूप को चलाने वाले थ्रेड को मारने के बारे में कैसे? यद्यपि आदर्श नहीं हो सकता है। –
http://stackoverflow.com/questions/5945533/how-to-execute-the-loop-for- विशिष्ट- समय – akhil
@ फिलिप एकबर्ग, अच्छा बिंदु! इसे ठीक करने की आवश्यकता है। :) हालांकि यह मेरी समस्या को ठीक करने में मेरी मदद नहीं कर सकता है। हालांकि यह एक अच्छा अभ्यास है। धन्यवाद। – silverspoon